<!DOCTYPE html>
<!-- saved from url=(0016)http://localhost -->
<html>
  <head>
    <meta charset="utf-8"/>
    <meta content="IE=edge" http-equiv="X-UA-Compatible"/>
    <title>数据结构Index</title>
    <style>
        body{
            margin: 0;
        }
        #content-info{
            width: auto;
            margin: 0 auto;
            text-align: center;
        }
        #author-info{
            white-space: nowrap;
            text-overflow: ellipsis;
            overflow: hidden;
        }
        #title{
            text-overflow: ellipsis;
            white-space: nowrap;
            overflow: hidden;
            padding-top: 10px;
            margin-bottom: 2px;
            font-size: 34px;
            color: #505050;
        }
        .text{
            white-space:nowrap;
            text-overflow: ellipsis;
            display: inline-block;
            margin-right: 20px;
            margin-bottom: 2px;
            font-size: 20px;
            color: #8c8c8c;
        }
        #navBar{
            width: auto;
            height: auto;
            position: fixed;
            right:0;
            bottom: 0;
            background-color: #f0f3f4;
            overflow-y: auto;
            text-align: center;
        }
        #svg-container{
            width: 100%;
            overflow-x: scroll;
            min-width: 0px;
            margin: 0 10px;
            overflow: visible;
            position: relative;
        }
        #nav-thumbs{
            overflow-y: scroll;
            padding: 0 5px;
        }
        .nav-thumb{
            position: relative;
            margin: 10px auto;
        }
        .nav-thumb >p{
            text-align: center;
            font-size: 12px;
            margin: 4px 0 0 0;
        }
        .nav-thumb >div{
            position: relative;
            display: inline-block;
            border: 1px solid #c6cfd5;
        }
        .nav-thumb img{
            display: block;
        }
        #main-content{
            bottom: 0;
            left: 0;
            right: 0;
            background-color: #d0cfd8;
            display: flex;
            height: auto;
            flex-flow: row wrap;
            text-align:center;
        }
        #svg-container >svg{
            overflow: visible;
            display: block;
            margin:5px auto;
            margin-bottom: 5px;
        }
        #copyright{
            bottom: 0;
            left: 50%;
            margin: 5px auto;
            font-size: 16px;
            color: #515151;
        }
        #copyright >a{
            text-decoration: none;
            color: #77C;
        }
        .number{
            position: absolute;
            top:0;
            left:0;
            border-top:22px solid #08a1ef;
            border-right: 22px solid transparent;
        }
        .pagenum{
            font-size: 12px;
            color: #fff;
            position: absolute;
            top: -23px;
            left: 2px;
        }
            #navBar::-webkit-scrollbar{
            width: 8px;
            background-color: #f5f5f5;
        }
            #navBar::-webkit-scrollbar-track{
            -webkit-box-shadow: inset 0 0 4px rgba(0,0,0,.3);
            border-radius: 8px;
            background-color: #fff;
        }
            #navBar::-webkit-scrollbar-thumb{
            border-radius: 8px;
            -webkit-box-shadow: inset 0 0 4px rgba(0,0,0,.3);
            background-color: #6b6b70;
        }
        #navBar::-webkit-scrollbar-thumb:hover{
            background-color: #4a4a4f;
        }
</style>
  </head>
  <body>
    <div id="main-area">
      <div id="content-info">
        <div id="content-info">
          <div id="title">数据结构Index</div>
        </div>
        <div id="author-info">
          <div class="text" id="author-name">RUWU</div>
          <div class="text" id="share-time">2024-03-05</div>
        </div>
      </div>
      <div id="main-content">
        <div id="svg-container"><svg width="2078" ed:hSpacing="30" preserveAspectRadio="xMinYMin meet" xmlns="http://www.w3.org/2000/svg" height="1771" xmlns:ev="http://www.w3.org/2001/xml-events" id="page0" viewBox="0 0 2078 1771" xmlns:xlink="http://www.w3.org/1999/xlink" ed:vSpacing="30" xmlns:ed="https://www.edrawsoft.com/xml/2017/SVGExtensions/" ed:name="画布 1">
    <style type="text/css"><![CDATA[
g[ed\:togtopicid],g[ed\:hyperlink],g[ed\:comment],g[ed\:note] {cursor:pointer;}
g[id] {-moz-user-select: none;-ms-user-select: none;user-select: none;}
svg text::selection,svg tspan::selection{background-color: #4285f4;color: #ffffff;fill: #ffffff;}
.st13 {fill:#141414}
.st10 {fill:#454545;font-family:Times New Roman;font-size:23pt;font-weight:bold}
.st12 {fill:#454545;font-family:华文楷体;font-size:15pt}
.st11 {fill:#454545;font-family:华文楷体;font-size:18pt}
.st14 {fill:#ffffff;font-family:华文楷体;font-size:33pt;font-weight:bold}
]]></style>
    <defs/>
    <rect width="2078" height="1771" x="0" y="0" fill="#fbfcfb"/>
    <g ed:fromid="101" transform="matrix(1,0,0,1,949.62,349.05)" ed:toid="406" ed:type="relation" id="407">
        <path d="M61.9,162.4C69.4,-253.1,-148.7,51.2,-61.9,-162.4" fill="none"/>
        <path d="M61.9,162.4C69.2,-242.4,-137.7,36,-68,-147" stroke="#ff0000" stroke-width="8" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
        <path d="M-61.9,-162.4L-79.6,-148.4C-75.8,-148.9,-71.8,-148.6,-68,-147C-64.1,-145.5,-60.9,-143.1,-58.6,-140.1L-61.9,-162.4" stroke-width="1" stroke="#ff0000" fill="#ff0000" stroke-linecap="round"/>
    </g>
    <path ed:tosuperid="122" transform="matrix(1,0,0,1,1124.4,425.6)" id="123" ed:parentid="101" d="M-36.8,85.6C-37,87.4,-36,88.7,-34.6,88.9C-33.2,89,-32,87.9,-31.8,86.1C-31.6,83.8,-31.4,81.5,-31.2,79.2C-30.9,76.8,-30.7,74.5,-30.5,72.2C-30.3,69.9,-30.1,67.5,-29.9,65.2C-29.7,62.9,-29.5,60.6,-29.3,58.2C-29.1,55.9,-28.9,53.6,-28.7,51.3C-28.4,48.9,-28.2,46.6,-28,44.3C-27.8,42,-27.6,39.6,-27.5,37.3C-27.3,35,-27.1,32.7,-26.9,30.3C-26.7,28,-26.5,25.7,-26.3,23.4C-26.1,21,-25.9,18.7,-25.7,16.4C-25.5,14.1,-25.3,11.7,-25.1,9.4C-24.9,7.1,-24.7,4.8,-24.5,2.4C-24.3,0.1,-24.1,-2.2,-23.9,-4.5C-23.7,-6.9,-23.5,-9.2,-23.3,-11.5C-23.1,-13.8,-22.9,-16.2,-22.7,-18.5C-22.5,-20.8,-22.3,-23.1,-22.1,-25.4C-21.8,-27.8,-21.6,-30.1,-21.4,-32.4C-21.2,-34.7,-21,-37.1,-20.8,-39.4C-20.6,-41.7,-20.3,-44,-20.1,-46.3C-19.9,-48.7,-19.7,-51,-19.4,-53.3C-19.2,-55.6,-19,-57.9,-18.8,-60.3C-18.5,-62.6,-18.3,-64.9,-18,-67.2C-17.8,-69.5,-17.6,-71.9,-17.3,-74.2C-17.1,-76.5,-16.8,-78.8,-16.6,-81.1C-16.3,-83.5,-16,-85.8,-15.8,-88.1C-15.5,-90.4,-15.2,-92.7,-15,-95C-14.7,-97.3,-14.4,-99.7,-14.1,-102C-13.8,-104.3,-13.6,-106.6,-13.3,-108.9C-13,-111.2,-12.7,-113.5,-12.4,-115.8C-12.1,-118.2,-11.7,-120.5,-11.4,-122.8C-11.1,-125.1,-10.8,-127.4,-10.4,-129.7C-10.1,-132,-9.8,-134.3,-9.4,-136.6C-9.1,-138.9,-8.7,-141.2,-8.3,-143.5C-8,-145.8,-7.6,-148.1,-7.2,-150.4C-6.8,-152.7,-6.5,-155,-6.1,-157.3C-5.7,-159.6,-5.3,-161.9,-4.8,-164.2C-4.4,-166.5,-4,-168.8,-3.5,-171C-3.1,-173.3,-2.7,-175.6,-2.2,-177.9C-1.7,-180.2,-1.3,-182.5,-0.8,-184.7C-0.3,-187,0.2,-189.3,0.7,-191.6C1.2,-193.8,1.8,-196.1,2.3,-198.4C2.8,-200.6,3.4,-202.9,4,-205.2C4.5,-207.4,5.1,-209.7,5.7,-211.9C6.3,-214.2,6.9,-216.4,7.6,-218.6C8.2,-220.9,8.9,-223.1,9.5,-225.3C10.2,-227.6,10.9,-229.8,11.6,-232C12.3,-234.2,13.1,-236.4,13.8,-238.6C14.6,-240.8,15.3,-243,16.1,-245.2C17,-247.4,17.8,-249.5,18.6,-251.7C19.5,-253.9,20.4,-256,21.3,-258.2C22.2,-260.3,23.1,-262.4,24.1,-264.5C25.1,-266.6,26.1,-268.7,27.1,-270.8C28.2,-272.9,29.2,-274.9,30.3,-277C31.5,-279,32.6,-281,33.8,-283C35,-285,36.2,-287,37.5,-288.9C38.7,-290.9,40.1,-292.8,41.4,-294.7C42.8,-296.6,44.2,-298.4,45.6,-300.2C47.1,-302,48.6,-303.8,50.2,-305.5C51.7,-307.2,53.3,-308.9,55,-310.5C56.6,-312.1,58.4,-313.7,60.1,-315.1C61.9,-316.6,63.7,-318.1,65.6,-319.4C67.5,-320.8,69.4,-322.1,71.4,-323.3C73.3,-324.5,75.4,-325.6,77.4,-326.7C79.5,-327.7,81.6,-328.7,83.7,-329.5C85.9,-330.4,88.1,-331.2,90.3,-331.9C92.5,-332.6,94.7,-333.2,97,-333.7C99.3,-334.2,101.5,-334.6,103.8,-334.9C106.2,-335.3,108.5,-335.5,110.8,-335.7C113,-335.8,115.2,-335.9,117.4,-335.9C117.8,-335.9,118,-336.1,118,-336.4C118,-336.7,117.8,-336.9,117.4,-336.9C115.2,-336.9,113,-336.8,110.7,-336.7C108.4,-336.6,106,-336.3,103.7,-336C101.4,-335.7,99,-335.3,96.8,-334.8C94.5,-334.3,92.2,-333.7,89.9,-333.1C87.7,-332.4,85.5,-331.6,83.3,-330.7C81.1,-329.9,78.9,-328.9,76.8,-327.9C74.7,-326.8,72.7,-325.7,70.6,-324.5C68.6,-323.3,66.7,-322,64.7,-320.6C62.8,-319.3,61,-317.8,59.2,-316.3C57.3,-314.8,55.6,-313.2,53.9,-311.6C52.2,-310,50.5,-308.3,49,-306.6C47.4,-304.9,45.8,-303.1,44.3,-301.3C42.8,-299.5,41.4,-297.6,40,-295.7C38.6,-293.8,37.3,-291.9,36,-289.9C34.7,-288,33.4,-286,32.2,-284C31,-282,29.8,-280,28.7,-277.9C27.5,-275.9,26.4,-273.8,25.4,-271.7C24.3,-269.6,23.3,-267.5,22.3,-265.4C21.3,-263.3,20.3,-261.1,19.4,-259C18.4,-256.8,17.5,-254.7,16.6,-252.5C15.8,-250.3,14.9,-248.2,14.1,-246C13.2,-243.8,12.4,-241.6,11.7,-239.4C10.9,-237.2,10.1,-234.9,9.4,-232.7C8.7,-230.5,7.9,-228.3,7.2,-226C6.5,-223.8,5.9,-221.6,5.2,-219.3C4.6,-217.1,3.9,-214.8,3.3,-212.6C2.7,-210.3,2.1,-208.1,1.5,-205.8C0.9,-203.5,0.3,-201.3,-0.3,-199C-0.8,-196.7,-1.4,-194.4,-1.9,-192.2C-2.4,-189.9,-2.9,-187.6,-3.5,-185.3C-4,-183,-4.5,-180.8,-4.9,-178.5C-5.4,-176.2,-5.9,-173.9,-6.3,-171.6C-6.8,-169.3,-7.3,-167,-7.7,-164.7C-8.1,-162.4,-8.6,-160.1,-9,-157.8C-9.4,-155.5,-9.8,-153.2,-10.2,-150.9C-10.6,-148.6,-11,-146.3,-11.4,-144C-11.8,-141.7,-12.2,-139.4,-12.5,-137.1C-12.9,-134.8,-13.3,-132.5,-13.6,-130.2C-14,-127.9,-14.3,-125.5,-14.6,-123.2C-15,-120.9,-15.3,-118.6,-15.6,-116.3C-16,-114,-16.3,-111.7,-16.6,-109.4C-16.9,-107,-17.2,-104.7,-17.5,-102.4C-17.8,-100.1,-18.1,-97.8,-18.4,-95.5C-18.7,-93.1,-19,-90.8,-19.3,-88.5C-19.6,-86.2,-19.9,-83.9,-20.1,-81.5C-20.4,-79.2,-20.7,-76.9,-21,-74.6C-21.2,-72.3,-21.5,-69.9,-21.7,-67.6C-22,-65.3,-22.3,-63,-22.5,-60.7C-22.8,-58.3,-23,-56,-23.3,-53.7C-23.5,-51.4,-23.8,-49.1,-24,-46.7C-24.2,-44.4,-24.5,-42.1,-24.7,-39.8C-25,-37.4,-25.2,-35.1,-25.4,-32.8C-25.6,-30.5,-25.9,-28.1,-26.1,-25.8C-26.3,-23.5,-26.6,-21.2,-26.8,-18.9C-27,-16.5,-27.2,-14.2,-27.5,-11.9C-27.7,-9.6,-27.9,-7.2,-28.1,-4.9C-28.3,-2.6,-28.6,-0.3,-28.8,2.1C-29,4.4,-29.2,6.7,-29.4,9C-29.6,11.3,-29.9,13.7,-30.1,16C-30.3,18.3,-30.5,20.6,-30.7,23C-30.9,25.3,-31.2,27.6,-31.4,29.9C-31.6,32.3,-31.8,34.6,-32,36.9C-32.2,39.2,-32.5,41.5,-32.7,43.9C-32.9,46.2,-33.1,48.5,-33.3,50.8C-33.6,53.2,-33.8,55.5,-34,57.8C-34.2,60.1,-34.5,62.4,-34.7,64.8C-34.9,67.1,-35.1,69.4,-35.4,71.7C-35.6,74.1,-35.8,76.4,-36.1,78.7C-36.3,81,-36.5,83.3,-36.8,85.6z" stroke="#ff7575" stroke-linejoin="round" fill="#ff7575" stroke-linecap="round"/>
    <path ed:tosuperid="139" transform="matrix(1,0,0,1,1124.4,669.73)" id="140" ed:parentid="101" d="M52.9,-72.7C51.4,-71.7,51.2,-70,52,-68.9C52.9,-67.8,54.5,-67.6,55.9,-68.7C57.7,-70.2,59.5,-71.6,61.4,-72.9C63.2,-74.3,65.1,-75.5,67.1,-76.7C69,-78,71,-79.1,73,-80.2C75,-81.3,77.1,-82.3,79.2,-83.2C81.3,-84.2,83.4,-85.1,85.5,-85.8C87.7,-86.6,89.9,-87.3,92.1,-88C94.3,-88.6,96.6,-89.1,98.8,-89.6C101.1,-90.1,103.3,-90.5,105.7,-90.8C108,-91.1,110.6,-91.4,112.6,-91.5C114.6,-91.7,116,-91.7,117.4,-91.8C117.8,-91.8,118,-92,118,-92.3C118,-92.5,117.8,-92.8,117.4,-92.8C116,-92.8,114.5,-92.8,112.5,-92.8C110.5,-92.8,107.9,-92.7,105.5,-92.5C103,-92.3,100.8,-92,98.5,-91.7C96.1,-91.3,93.8,-90.9,91.5,-90.4C89.2,-89.9,86.9,-89.3,84.6,-88.6C82.3,-87.9,80.1,-87.2,77.9,-86.3C75.7,-85.5,73.5,-84.6,71.3,-83.6C69.2,-82.6,67,-81.5,64.9,-80.3C62.9,-79.2,60.8,-78,58.8,-76.7C56.8,-75.4,54.8,-74.1,52.9,-72.7z" stroke="#ffcd55" stroke-linejoin="round" fill="#ffcd55" stroke-linecap="round"/>
    <path ed:tosuperid="145" transform="matrix(1,0,0,1,1124.4,834.38)" id="146" ed:parentid="101" d="M55.8,51.1C54.3,50.1,52.6,50.4,51.9,51.5C51.1,52.7,51.5,54.3,53,55.3C55.1,56.5,57.1,57.7,59.2,58.8C61.3,60,63.4,61.1,65.5,62.1C67.7,63.1,69.9,64,72.1,64.9C74.3,65.8,76.5,66.6,78.7,67.4C81,68.1,83.3,68.8,85.5,69.4C87.8,70,90.1,70.5,92.5,71C94.8,71.4,97.1,71.8,99.5,72.1C101.8,72.4,104,72.6,106.5,72.7C109,72.9,111.7,72.9,113.5,72.9C115.4,73,116.4,72.9,117.4,72.9C117.8,72.9,118,72.7,118,72.4C118,72.1,117.8,71.9,117.4,71.9C116.4,71.9,115.4,71.8,113.6,71.7C111.7,71.6,109.1,71.4,106.6,71.1C104.2,70.8,102,70.4,99.8,70C97.5,69.6,95.2,69.1,93,68.5C90.8,68,88.5,67.3,86.4,66.6C84.2,65.9,82,65.1,79.9,64.3C77.7,63.4,75.6,62.5,73.6,61.5C71.5,60.5,69.4,59.5,67.4,58.4C65.4,57.3,63.4,56.1,61.5,54.9C59.6,53.7,57.7,52.4,55.8,51.1z" stroke="#f1a3dc" stroke-linejoin="round" fill="#f1a3dc" stroke-linecap="round"/>
    <path ed:tosuperid="147" transform="matrix(1,0,0,1,1124.4,519.28)" id="148" ed:parentid="101" d="M-21.6,-8.2C-21.9,-6.4,-21,-5.1,-19.6,-4.8C-18.3,-4.6,-16.9,-5.6,-16.7,-7.4C-16.3,-9.7,-15.9,-12,-15.5,-14.3C-15.1,-16.6,-14.8,-18.9,-14.4,-21.2C-14,-23.5,-13.6,-25.8,-13.2,-28.1C-12.8,-30.4,-12.4,-32.7,-12,-35C-11.6,-37.3,-11.2,-39.6,-10.8,-41.8C-10.4,-44.1,-10,-46.4,-9.6,-48.7C-9.2,-51,-8.8,-53.3,-8.3,-55.6C-7.9,-57.9,-7.5,-60.2,-7.1,-62.5C-6.6,-64.8,-6.2,-67,-5.7,-69.3C-5.3,-71.6,-4.8,-73.9,-4.3,-76.2C-3.9,-78.5,-3.4,-80.7,-2.9,-83C-2.4,-85.3,-1.9,-87.6,-1.4,-89.8C-0.9,-92.1,-0.4,-94.4,0.1,-96.6C0.6,-98.9,1.2,-101.2,1.7,-103.4C2.3,-105.7,2.8,-108,3.4,-110.2C4,-112.5,4.6,-114.7,5.2,-117C5.8,-119.2,6.4,-121.5,7,-123.7C7.7,-125.9,8.3,-128.2,9,-130.4C9.7,-132.6,10.4,-134.8,11.1,-137C11.8,-139.3,12.5,-141.5,13.2,-143.7C14,-145.9,14.7,-148.1,15.5,-150.2C16.3,-152.4,17.1,-154.6,18,-156.8C18.8,-158.9,19.7,-161.1,20.6,-163.2C21.5,-165.4,22.4,-167.5,23.3,-169.6C24.3,-171.7,25.3,-173.8,26.3,-175.9C27.3,-178,28.4,-180.1,29.4,-182.1C30.5,-184.2,31.7,-186.2,32.8,-188.2C34,-190.2,35.2,-192.2,36.4,-194.1C37.7,-196.1,39,-198,40.3,-199.9C41.6,-201.8,43,-203.7,44.4,-205.5C45.9,-207.3,47.3,-209.1,48.9,-210.8C50.4,-212.5,52,-214.2,53.6,-215.9C55.3,-217.5,57,-219.1,58.7,-220.6C60.4,-222.1,62.2,-223.6,64.1,-224.9C65.9,-226.3,67.8,-227.6,69.8,-228.9C71.8,-230.1,73.8,-231.3,75.8,-232.3C77.9,-233.4,79.9,-234.4,82.1,-235.3C84.2,-236.2,86.4,-237,88.6,-237.7C90.8,-238.4,93,-239.1,95.3,-239.6C97.5,-240.2,99.8,-240.6,102.1,-241C104.3,-241.3,106.4,-241.6,109,-241.8C111.5,-242,114.5,-242.1,115.9,-242.2C117.4,-242.2,117.4,-242.2,117.4,-242.2C117.3,-241.9,118,-242.4,118,-242.7C118,-243,117.3,-242.9,117.4,-243.2C117.4,-243.2,117.4,-243.2,115.9,-243.2C114.4,-243.2,111.5,-243.1,108.9,-242.9C106.3,-242.8,104.2,-242.5,101.9,-242.2C99.6,-241.8,97.3,-241.4,95,-240.9C92.7,-240.4,90.4,-239.8,88.2,-239.1C85.9,-238.4,83.7,-237.6,81.5,-236.7C79.3,-235.8,77.2,-234.8,75.1,-233.7C73,-232.7,70.9,-231.5,68.9,-230.3C66.9,-229.1,64.9,-227.8,63,-226.4C61.1,-225,59.3,-223.5,57.5,-222C55.7,-220.5,53.9,-218.9,52.2,-217.3C50.6,-215.6,48.9,-213.9,47.3,-212.2C45.8,-210.4,44.2,-208.7,42.7,-206.8C41.3,-205,39.8,-203.1,38.5,-201.2C37.1,-199.3,35.7,-197.4,34.5,-195.4C33.2,-193.5,31.9,-191.5,30.7,-189.4C29.5,-187.4,28.3,-185.4,27.2,-183.3C26.1,-181.3,25,-179.2,23.9,-177.1C22.9,-175,21.9,-172.9,20.9,-170.8C19.9,-168.6,18.9,-166.5,18,-164.3C17.1,-162.2,16.2,-160,15.3,-157.8C14.4,-155.7,13.5,-153.5,12.7,-151.3C11.9,-149.1,11.1,-146.9,10.3,-144.7C9.5,-142.5,8.8,-140.3,8,-138C7.3,-135.8,6.6,-133.6,5.8,-131.4C5.1,-129.1,4.5,-126.9,3.8,-124.6C3.1,-122.4,2.5,-120.1,1.8,-117.9C1.2,-115.6,0.6,-113.4,-0,-111.1C-0.7,-108.9,-1.2,-106.6,-1.8,-104.3C-2.4,-102.1,-3,-99.8,-3.5,-97.5C-4.1,-95.3,-4.7,-93,-5.2,-90.7C-5.7,-88.4,-6.3,-86.1,-6.8,-83.9C-7.3,-81.6,-7.8,-79.3,-8.3,-77C-8.8,-74.7,-9.3,-72.5,-9.8,-70.2C-10.3,-67.9,-10.7,-65.6,-11.2,-63.3C-11.7,-61,-12.1,-58.7,-12.6,-56.4C-13.1,-54.1,-13.5,-51.8,-14,-49.5C-14.4,-47.3,-14.9,-45,-15.3,-42.7C-15.7,-40.4,-16.2,-38.1,-16.6,-35.8C-17,-33.5,-17.4,-31.2,-17.9,-28.9C-18.3,-26.6,-18.7,-24.3,-19.1,-22C-19.5,-19.7,-19.9,-17.4,-20.4,-15.1C-20.8,-12.8,-21.2,-10.5,-21.6,-8.2z" stroke="#5fb7f1" stroke-linejoin="round" fill="#5fb7f1" stroke-linecap="round"/>
    <path ed:tosuperid="151" transform="matrix(1,0,0,1,1415.35,70.27)" id="152" ed:parentid="122" d="M-17.5,18.9C0.8,18.9,-3.1,-18.9,17.5,-18.9" stroke="#ff7575" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="165" transform="matrix(1,0,0,1,1439.35,243.44)" id="166" ed:parentid="147" d="M-17.5,33.1C3.6,33.1,-9.6,-33.1,17.5,-33.1" stroke="#5fb7f1" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="167" transform="matrix(1,0,0,1,1439.35,309.68)" id="168" ed:parentid="147" d="M-17.5,-33.1C3.6,-33.1,-9.6,33.1,17.5,33.1" stroke="#5fb7f1" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="169" transform="matrix(1,0,0,1,1672.45,323.88)" id="170" ed:parentid="167" d="M-17.5,18.9C0.8,18.9,-3.1,-18.9,17.6,-18.9" stroke="#5fb7f1" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="185" transform="matrix(1,0,0,1,1607.35,840.54)" id="186" ed:parentid="145" d="M-17.6,66.2C7,66.2,-17.5,-66.2,17.5,-66.2" stroke="#f1a3dc" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="191" transform="matrix(1,0,0,1,1607.35,887.85)" id="192" ed:parentid="145" d="M-17.6,18.9C0.8,18.9,-3.1,-18.9,17.5,-18.9" stroke="#f1a3dc" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="193" transform="matrix(1,0,0,1,1607.35,925.7)" id="194" ed:parentid="145" d="M-17.6,-18.9C0.8,-18.9,-3.1,18.9,17.5,18.9" stroke="#f1a3dc" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="246" transform="matrix(1,0,0,1,1124.4,1098.39)" id="247" ed:parentid="101" d="M-31.8,-86.1C-32,-87.9,-33.2,-89,-34.6,-88.9C-36,-88.7,-37,-87.4,-36.8,-85.6C-36.5,-83.3,-36.3,-81,-36.1,-78.7C-35.8,-76.4,-35.6,-74.1,-35.4,-71.7C-35.1,-69.4,-34.9,-67.1,-34.7,-64.8C-34.5,-62.4,-34.2,-60.1,-34,-57.8C-33.8,-55.5,-33.6,-53.2,-33.3,-50.8C-33.1,-48.5,-32.9,-46.2,-32.7,-43.9C-32.5,-41.5,-32.2,-39.2,-32,-36.9C-31.8,-34.6,-31.6,-32.3,-31.4,-29.9C-31.2,-27.6,-30.9,-25.3,-30.7,-23C-30.5,-20.6,-30.3,-18.3,-30.1,-16C-29.9,-13.7,-29.6,-11.3,-29.4,-9C-29.2,-6.7,-29,-4.4,-28.8,-2.1C-28.6,0.3,-28.3,2.6,-28.1,4.9C-27.9,7.2,-27.7,9.6,-27.5,11.9C-27.2,14.2,-27,16.5,-26.8,18.9C-26.6,21.2,-26.3,23.5,-26.1,25.8C-25.9,28.1,-25.6,30.5,-25.4,32.8C-25.2,35.1,-25,37.4,-24.7,39.8C-24.5,42.1,-24.2,44.4,-24,46.7C-23.8,49.1,-23.5,51.4,-23.3,53.7C-23,56,-22.8,58.3,-22.5,60.7C-22.3,63,-22,65.3,-21.7,67.6C-21.5,69.9,-21.2,72.3,-21,74.6C-20.7,76.9,-20.4,79.2,-20.1,81.5C-19.9,83.9,-19.6,86.2,-19.3,88.5C-19,90.8,-18.7,93.1,-18.4,95.5C-18.1,97.8,-17.8,100.1,-17.5,102.4C-17.2,104.7,-16.9,107,-16.6,109.4C-16.3,111.7,-16,114,-15.6,116.3C-15.3,118.6,-15,120.9,-14.6,123.2C-14.3,125.5,-14,127.9,-13.6,130.2C-13.3,132.5,-12.9,134.8,-12.5,137.1C-12.2,139.4,-11.8,141.7,-11.4,144C-11,146.3,-10.6,148.6,-10.2,150.9C-9.8,153.2,-9.4,155.5,-9,157.8C-8.6,160.1,-8.1,162.4,-7.7,164.7C-7.3,167,-6.8,169.3,-6.3,171.6C-5.9,173.9,-5.4,176.2,-4.9,178.5C-4.5,180.8,-4,183,-3.5,185.3C-2.9,187.6,-2.4,189.9,-1.9,192.2C-1.4,194.4,-0.8,196.7,-0.3,199C0.3,201.3,0.9,203.5,1.5,205.8C2.1,208.1,2.7,210.3,3.3,212.6C3.9,214.8,4.6,217.1,5.2,219.3C5.9,221.6,6.5,223.8,7.2,226C7.9,228.3,8.7,230.5,9.4,232.7C10.1,234.9,10.9,237.2,11.7,239.4C12.4,241.6,13.2,243.8,14.1,246C14.9,248.2,15.8,250.3,16.6,252.5C17.5,254.7,18.4,256.8,19.4,259C20.3,261.1,21.3,263.3,22.3,265.4C23.3,267.5,24.3,269.6,25.4,271.7C26.4,273.8,27.5,275.9,28.7,277.9C29.8,280,31,282,32.2,284C33.4,286,34.7,288,36,289.9C37.3,291.9,38.6,293.8,40,295.7C41.4,297.6,42.8,299.5,44.3,301.3C45.8,303.1,47.4,304.9,49,306.6C50.5,308.3,52.2,310,53.9,311.6C55.6,313.2,57.3,314.8,59.2,316.3C61,317.8,62.8,319.3,64.7,320.6C66.7,322,68.6,323.3,70.6,324.5C72.7,325.7,74.7,326.8,76.8,327.9C78.9,328.9,81.1,329.9,83.3,330.7C85.5,331.6,87.7,332.4,89.9,333.1C92.2,333.7,94.5,334.3,96.8,334.8C99,335.3,101.4,335.7,103.7,336C106,336.3,108.4,336.6,110.7,336.7C113,336.8,115.2,336.9,117.4,336.9C117.8,336.9,118,336.7,118,336.4C118,336.1,117.8,335.9,117.4,335.9C115.2,335.9,113,335.8,110.8,335.7C108.5,335.5,106.2,335.3,103.8,334.9C101.5,334.6,99.3,334.2,97,333.7C94.7,333.2,92.5,332.6,90.3,331.9C88.1,331.2,85.9,330.4,83.7,329.5C81.6,328.7,79.5,327.7,77.4,326.7C75.4,325.6,73.3,324.5,71.4,323.3C69.4,322.1,67.5,320.8,65.6,319.4C63.7,318.1,61.9,316.6,60.1,315.1C58.4,313.7,56.6,312.1,55,310.5C53.3,308.9,51.7,307.2,50.2,305.5C48.6,303.8,47.1,302,45.6,300.2C44.2,298.4,42.8,296.6,41.4,294.7C40.1,292.8,38.7,290.9,37.5,288.9C36.2,287,35,285,33.8,283C32.6,281,31.5,279,30.3,277C29.2,274.9,28.2,272.9,27.1,270.8C26.1,268.7,25.1,266.6,24.1,264.5C23.1,262.4,22.2,260.3,21.3,258.2C20.4,256,19.5,253.9,18.6,251.7C17.8,249.5,17,247.4,16.1,245.2C15.3,243,14.6,240.8,13.8,238.6C13.1,236.4,12.3,234.2,11.6,232C10.9,229.8,10.2,227.6,9.5,225.3C8.9,223.1,8.2,220.9,7.6,218.6C6.9,216.4,6.3,214.2,5.7,211.9C5.1,209.7,4.5,207.4,4,205.2C3.4,202.9,2.8,200.6,2.3,198.4C1.8,196.1,1.2,193.8,0.7,191.6C0.2,189.3,-0.3,187,-0.8,184.7C-1.3,182.5,-1.7,180.2,-2.2,177.9C-2.7,175.6,-3.1,173.3,-3.5,171C-4,168.8,-4.4,166.5,-4.8,164.2C-5.3,161.9,-5.7,159.6,-6.1,157.3C-6.5,155,-6.8,152.7,-7.2,150.4C-7.6,148.1,-8,145.8,-8.3,143.5C-8.7,141.2,-9.1,138.9,-9.4,136.6C-9.8,134.3,-10.1,132,-10.4,129.7C-10.8,127.4,-11.1,125.1,-11.4,122.8C-11.7,120.5,-12.1,118.2,-12.4,115.8C-12.7,113.5,-13,111.2,-13.3,108.9C-13.6,106.6,-13.8,104.3,-14.1,102C-14.4,99.7,-14.7,97.3,-15,95C-15.2,92.7,-15.5,90.4,-15.8,88.1C-16,85.8,-16.3,83.5,-16.6,81.1C-16.8,78.8,-17.1,76.5,-17.3,74.2C-17.6,71.9,-17.8,69.5,-18,67.2C-18.3,64.9,-18.5,62.6,-18.8,60.3C-19,57.9,-19.2,55.6,-19.4,53.3C-19.7,51,-19.9,48.7,-20.1,46.3C-20.3,44,-20.6,41.7,-20.8,39.4C-21,37.1,-21.2,34.7,-21.4,32.4C-21.6,30.1,-21.8,27.8,-22.1,25.4C-22.3,23.1,-22.5,20.8,-22.7,18.5C-22.9,16.2,-23.1,13.8,-23.3,11.5C-23.5,9.2,-23.7,6.9,-23.9,4.5C-24.1,2.2,-24.3,-0.1,-24.5,-2.4C-24.7,-4.8,-24.9,-7.1,-25.1,-9.4C-25.3,-11.7,-25.5,-14.1,-25.7,-16.4C-25.9,-18.7,-26.1,-21,-26.3,-23.4C-26.5,-25.7,-26.7,-28,-26.9,-30.3C-27.1,-32.7,-27.3,-35,-27.5,-37.3C-27.6,-39.6,-27.8,-42,-28,-44.3C-28.2,-46.6,-28.4,-48.9,-28.7,-51.3C-28.9,-53.6,-29.1,-55.9,-29.3,-58.2C-29.5,-60.6,-29.7,-62.9,-29.9,-65.2C-30.1,-67.5,-30.3,-69.9,-30.5,-72.2C-30.7,-74.5,-30.9,-76.8,-31.2,-79.2C-31.4,-81.5,-31.6,-83.8,-31.8,-86.1z" stroke="#6cc9e5" stroke-linejoin="round" fill="#6cc9e5" stroke-linecap="round"/>
    <path ed:tosuperid="252" transform="matrix(1,0,0,1,1487.35,1420.59)" id="253" ed:parentid="246" d="M-17.5,14.2C-0.2,14.2,-0.7,-14.2,17.5,-14.2" stroke="#6cc9e5" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="254" transform="matrix(1,0,0,1,1487.35,1505.76)" id="255" ed:parentid="246" d="M-17.5,-71C7,-71,-17.5,71,17.5,71" stroke="#6cc9e5" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="258" transform="matrix(1,0,0,1,889.6,531.11)" id="259" ed:parentid="101" d="M13.4,-19.1C13.7,-17.4,15,-16.4,16.4,-16.7C17.7,-16.9,18.6,-18.3,18.3,-20.1C17.8,-22.4,17.4,-24.7,16.9,-27C16.5,-29.2,16,-31.5,15.5,-33.8C15.1,-36.1,14.6,-38.4,14.1,-40.7C13.7,-43,13.2,-45.3,12.7,-47.5C12.2,-49.8,11.7,-52.1,11.2,-54.4C10.7,-56.7,10.2,-59,9.7,-61.3C9.2,-63.5,8.7,-65.8,8.2,-68.1C7.6,-70.4,7.1,-72.7,6.6,-74.9C6,-77.2,5.5,-79.5,4.9,-81.7C4.4,-84,3.8,-86.3,3.2,-88.6C2.6,-90.8,2,-93.1,1.4,-95.3C0.8,-97.6,0.2,-99.9,-0.4,-102.1C-1.1,-104.4,-1.7,-106.6,-2.4,-108.9C-3,-111.1,-3.7,-113.4,-4.4,-115.6C-5.1,-117.8,-5.8,-120.1,-6.5,-122.3C-7.3,-124.5,-8,-126.7,-8.8,-129C-9.5,-131.2,-10.3,-133.4,-11.1,-135.6C-11.9,-137.8,-12.8,-140,-13.6,-142.2C-14.5,-144.3,-15.3,-146.5,-16.2,-148.7C-17.1,-150.8,-18.1,-153,-19,-155.1C-20,-157.3,-21,-159.4,-22,-161.5C-23,-163.6,-24.1,-165.7,-25.2,-167.8C-26.3,-169.9,-27.4,-172,-28.5,-174C-29.7,-176.1,-30.9,-178.1,-32.1,-180.1C-33.4,-182.1,-34.7,-184,-36,-186C-37.3,-187.9,-38.7,-189.8,-40.1,-191.7C-41.5,-193.6,-43,-195.4,-44.5,-197.2C-46.1,-199,-47.6,-200.8,-49.3,-202.5C-50.9,-204.2,-52.6,-205.8,-54.3,-207.4C-56,-209,-57.8,-210.6,-59.7,-212C-61.5,-213.5,-63.4,-214.9,-65.4,-216.2C-67.3,-217.5,-69.3,-218.8,-71.4,-220C-73.4,-221.1,-75.5,-222.2,-77.6,-223.2C-79.8,-224.2,-81.9,-225.1,-84.2,-225.9C-86.4,-226.7,-88.6,-227.4,-90.9,-228C-93.1,-228.7,-95.5,-229.2,-97.7,-229.7C-100,-230.1,-102.3,-230.4,-104.7,-230.7C-107.1,-231,-109.6,-231.2,-111.7,-231.3C-113.9,-231.4,-115.6,-231.4,-117.4,-231.4C-117.8,-231.4,-118,-231.2,-118,-230.9C-118,-230.6,-117.8,-230.4,-117.4,-230.4C-115.6,-230.4,-113.9,-230.3,-111.8,-230.2C-109.7,-230.1,-107.2,-229.8,-104.9,-229.5C-102.5,-229.2,-100.3,-228.9,-98,-228.4C-95.7,-227.9,-93.5,-227.4,-91.3,-226.7C-89,-226.1,-86.8,-225.3,-84.7,-224.5C-82.5,-223.7,-80.4,-222.7,-78.3,-221.7C-76.2,-220.7,-74.2,-219.6,-72.2,-218.5C-70.2,-217.3,-68.3,-216.1,-66.4,-214.7C-64.5,-213.4,-62.6,-212,-60.9,-210.5C-59.1,-209.1,-57.3,-207.5,-55.7,-206C-54,-204.4,-52.4,-202.7,-50.8,-201C-49.2,-199.3,-47.7,-197.6,-46.2,-195.8C-44.8,-194,-43.3,-192.2,-42,-190.3C-40.6,-188.5,-39.3,-186.6,-38,-184.6C-36.7,-182.7,-35.5,-180.7,-34.3,-178.8C-33.1,-176.8,-32,-174.8,-30.8,-172.7C-29.7,-170.7,-28.6,-168.6,-27.6,-166.6C-26.6,-164.5,-25.5,-162.4,-24.6,-160.3C-23.6,-158.2,-22.6,-156.1,-21.7,-154C-20.8,-151.8,-19.9,-149.7,-19.1,-147.5C-18.2,-145.4,-17.4,-143.2,-16.5,-141C-15.7,-138.9,-14.9,-136.7,-14.2,-134.5C-13.4,-132.3,-12.7,-130.1,-11.9,-127.9C-11.2,-125.7,-10.5,-123.5,-9.8,-121.2C-9.1,-119,-8.5,-116.8,-7.8,-114.6C-7.1,-112.3,-6.5,-110.1,-5.9,-107.9C-5.3,-105.6,-4.7,-103.4,-4.1,-101.1C-3.5,-98.9,-2.9,-96.6,-2.3,-94.4C-1.7,-92.1,-1.2,-89.9,-0.6,-87.6C-0.1,-85.3,0.4,-83.1,1,-80.8C1.5,-78.5,2,-76.3,2.5,-74C3,-71.7,3.5,-69.4,4,-67.2C4.5,-64.9,5,-62.6,5.4,-60.3C5.9,-58.1,6.4,-55.8,6.8,-53.5C7.3,-51.2,7.8,-48.9,8.2,-46.6C8.6,-44.3,9.1,-42.1,9.5,-39.8C10,-37.5,10.4,-35.2,10.8,-32.9C11.3,-30.6,11.7,-28.3,12.1,-26C12.5,-23.7,12.9,-21.4,13.4,-19.1z" stroke="#a98ae7" stroke-linejoin="round" fill="#a98ae7" stroke-linecap="round"/>
    <path ed:tosuperid="260" transform="matrix(1,0,0,1,622.65,210.32)" id="261" ed:parentid="258" d="M17.5,89.9C-7,89.9,17.5,-89.9,-17.5,-89.9" stroke="#a98ae7" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="262" transform="matrix(1,0,0,1,622.65,238.71)" id="263" ed:parentid="258" d="M17.5,61.5C-6.8,61.5,17.1,-61.5,-17.5,-61.5" stroke="#a98ae7" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="159" transform="matrix(1,0,0,1,1415.35,89.2)" id="160" ed:parentid="122" d="M-17.5,-0C-3.5,-0,7,0,17.5,0" stroke="#ff7575" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="231" transform="matrix(1,0,0,1,1463.35,549.09)" id="232" ed:parentid="139" d="M-17.5,28.4C2.7,28.4,-7.6,-28.4,17.5,-28.4" stroke="#ffcd55" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="235" transform="matrix(1,0,0,1,1487.35,1297.58)" id="236" ed:parentid="246" d="M-17.5,137.2C7,137.2,-17.5,-137.2,17.5,-137.2" stroke="#6cc9e5" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="237" transform="matrix(1,0,0,1,1487.35,1344.89)" id="238" ed:parentid="246" d="M-17.5,89.9C7,89.9,-17.5,-89.9,17.5,-89.9" stroke="#6cc9e5" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="276" transform="matrix(1,0,0,1,1415.35,108.13)" id="277" ed:parentid="122" d="M-17.5,-18.9C0.8,-18.9,-3.1,18.9,17.5,18.9" stroke="#ff7575" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="284" transform="matrix(1,0,0,1,1607.35,973.01)" id="285" ed:parentid="145" d="M-17.6,-66.2C7,-66.2,-17.5,66.2,17.5,66.2" stroke="#f1a3dc" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="288" transform="matrix(1,0,0,1,1487.35,1571.99)" id="289" ed:parentid="246" d="M-17.5,-137.2C7,-137.2,-17.5,137.2,17.5,137.2" stroke="#6cc9e5" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="290" transform="matrix(1,0,0,1,622.65,276.56)" id="291" ed:parentid="258" d="M17.5,23.7C-1.8,23.7,5.4,-23.7,-17.5,-23.7" stroke="#a98ae7" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="292" transform="matrix(1,0,0,1,622.65,314.41)" id="293" ed:parentid="258" d="M17.5,-14.2C0.2,-14.2,0.7,14.2,-17.5,14.2" stroke="#a98ae7" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="190" transform="matrix(1,0,0,1,1672.45,342.8)" id="195" ed:parentid="167" d="M-17.5,0C-3.5,0,7,0,17.6,0" stroke="#5fb7f1" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="196" transform="matrix(1,0,0,1,1672.45,361.73)" id="197" ed:parentid="167" d="M-17.5,-18.9C0.8,-18.9,-3.1,18.9,17.6,18.9" stroke="#5fb7f1" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="181" transform="matrix(1,0,0,1,1536.45,539.63)" id="198" ed:parentid="231" d="M-17.5,-18.9C0.8,-18.9,-3.1,18.9,17.6,18.9" stroke="#ffcd55" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="179" transform="matrix(1,0,0,1,1536.45,520.7)" id="199" ed:parentid="231" d="M-17.5,0C-3.5,0,7,0,17.6,0" stroke="#ffcd55" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="177" transform="matrix(1,0,0,1,1536.45,501.78)" id="200" ed:parentid="231" d="M-17.5,18.9C0.8,18.9,-3.1,-18.9,17.6,-18.9" stroke="#ffcd55" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="203" transform="matrix(1,0,0,1,1463.35,605.86)" id="204" ed:parentid="139" d="M-17.5,-28.4C2.7,-28.4,-7.6,28.4,17.5,28.4" stroke="#ffcd55" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="205" transform="matrix(1,0,0,1,1556.45,615.32)" id="208" ed:parentid="203" d="M-17.5,18.9C0.8,18.9,-3.1,-18.9,17.6,-18.9" stroke="#ffcd55" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="206" transform="matrix(1,0,0,1,1556.45,634.25)" id="209" ed:parentid="203" d="M-17.5,0C-3.5,0,7,0,17.6,0" stroke="#ffcd55" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="207" transform="matrix(1,0,0,1,1556.45,653.17)" id="210" ed:parentid="203" d="M-17.5,-18.9C0.8,-18.9,-3.1,18.9,17.6,18.9" stroke="#ffcd55" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="211" transform="matrix(1,0,0,1,1672.45,304.95)" id="212" ed:parentid="167" d="M-17.5,37.9C4.4,37.9,-11.4,-37.9,17.6,-37.9" stroke="#5fb7f1" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="213" transform="matrix(1,0,0,1,1672.45,380.65)" id="214" ed:parentid="167" d="M-17.5,-37.9C4.4,-37.9,-11.4,37.9,17.6,37.9" stroke="#5fb7f1" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="215" transform="matrix(1,0,0,1,1652.45,200.86)" id="216" ed:parentid="165" d="M-17.5,9.5C-1.3,9.5,1.9,-9.5,17.6,-9.5" stroke="#5fb7f1" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="217" transform="matrix(1,0,0,1,1652.45,219.79)" id="218" ed:parentid="165" d="M-17.5,-9.5C-1.3,-9.5,1.9,9.5,17.6,9.5" stroke="#5fb7f1" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="221" transform="matrix(1,0,0,1,1680.45,755.38)" id="222" ed:parentid="185" d="M-17.5,18.9C0.8,18.9,-3.1,-18.9,17.6,-18.9" stroke="#f1a3dc" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="223" transform="matrix(1,0,0,1,1680.45,774.3)" id="224" ed:parentid="185" d="M-17.5,0C-3.5,0,7,0,17.6,0" stroke="#f1a3dc" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="225" transform="matrix(1,0,0,1,1680.45,793.22)" id="226" ed:parentid="185" d="M-17.5,-18.9C0.8,-18.9,-3.1,18.9,17.6,18.9" stroke="#f1a3dc" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="227" transform="matrix(1,0,0,1,1700.45,859.46)" id="228" ed:parentid="191" d="M-17.5,9.5C-1.3,9.5,1.9,-9.5,17.6,-9.5" stroke="#f1a3dc" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="229" transform="matrix(1,0,0,1,1700.45,878.39)" id="230" ed:parentid="191" d="M-17.5,-9.5C-1.3,-9.5,1.9,9.5,17.6,9.5" stroke="#f1a3dc" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="239" transform="matrix(1,0,0,1,1800.45,935.16)" id="240" ed:parentid="193" d="M-17.5,9.5C-1.3,9.5,1.9,-9.5,17.6,-9.5" stroke="#f1a3dc" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="241" transform="matrix(1,0,0,1,1800.45,954.09)" id="242" ed:parentid="193" d="M-17.5,-9.5C-1.3,-9.5,1.9,9.5,17.6,9.5" stroke="#f1a3dc" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="243" transform="matrix(1,0,0,1,1720.45,1020.33)" id="244" ed:parentid="284" d="M-17.5,18.9C0.8,18.9,-3.1,-18.9,17.6,-18.9" stroke="#f1a3dc" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="249" transform="matrix(1,0,0,1,1720.45,1039.25)" id="250" ed:parentid="284" d="M-17.5,0C-3.5,0,7,0,17.6,0" stroke="#f1a3dc" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="251" transform="matrix(1,0,0,1,1720.45,1058.17)" id="256" ed:parentid="284" d="M-17.5,-18.9C0.8,-18.9,-3.1,18.9,17.6,18.9" stroke="#f1a3dc" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="265" transform="matrix(1,0,0,1,1660.45,1150.91)" id="266" ed:parentid="235" d="M-17.5,9.5C-1.3,9.5,1.9,-9.5,17.6,-9.5" stroke="#6cc9e5" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="267" transform="matrix(1,0,0,1,1660.45,1169.84)" id="268" ed:parentid="235" d="M-17.5,-9.5C-1.3,-9.5,1.9,9.5,17.6,9.5" stroke="#6cc9e5" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="269" transform="matrix(1,0,0,1,1600.45,1236.08)" id="270" ed:parentid="237" d="M-17.5,18.9C0.8,18.9,-3.1,-18.9,17.6,-18.9" stroke="#6cc9e5" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="271" transform="matrix(1,0,0,1,1600.45,1255)" id="272" ed:parentid="237" d="M-17.5,0C-3.5,0,7,0,17.6,0" stroke="#6cc9e5" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="273" transform="matrix(1,0,0,1,1600.45,1273.92)" id="274" ed:parentid="237" d="M-17.5,-18.9C0.8,-18.9,-3.1,18.9,17.6,18.9" stroke="#6cc9e5" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="275" transform="matrix(1,0,0,1,1760.45,1368.55)" id="278" ed:parentid="252" d="M-17.5,37.9C4.4,37.9,-11.4,-37.8,17.6,-37.8" stroke="#6cc9e5" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="279" transform="matrix(1,0,0,1,1760.45,1387.48)" id="280" ed:parentid="252" d="M-17.5,18.9C0.8,18.9,-3.1,-18.9,17.6,-18.9" stroke="#6cc9e5" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="281" transform="matrix(1,0,0,1,1760.45,1406.4)" id="282" ed:parentid="252" d="M-17.5,0C-3.5,0,7,0,17.6,0" stroke="#6cc9e5" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="283" transform="matrix(1,0,0,1,1760.45,1425.33)" id="286" ed:parentid="252" d="M-17.5,-18.9C0.8,-18.9,-3.1,18.9,17.6,18.9" stroke="#6cc9e5" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="287" transform="matrix(1,0,0,1,1760.45,1444.25)" id="294" ed:parentid="252" d="M-17.5,-37.8C4.4,-37.8,-11.4,37.8,17.6,37.8" stroke="#6cc9e5" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="295" transform="matrix(1,0,0,1,1620.45,1548.34)" id="296" ed:parentid="254" d="M-17.5,28.4C2.7,28.4,-7.6,-28.4,17.6,-28.4" stroke="#6cc9e5" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="297" transform="matrix(1,0,0,1,1620.45,1567.26)" id="298" ed:parentid="254" d="M-17.5,9.5C-1.3,9.5,1.9,-9.5,17.6,-9.5" stroke="#6cc9e5" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="299" transform="matrix(1,0,0,1,1620.45,1586.19)" id="300" ed:parentid="254" d="M-17.5,-9.5C-1.3,-9.5,1.9,9.5,17.6,9.5" stroke="#6cc9e5" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="301" transform="matrix(1,0,0,1,1620.45,1605.11)" id="302" ed:parentid="254" d="M-17.5,-28.4C2.7,-28.4,-7.6,28.4,17.6,28.4" stroke="#6cc9e5" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="303" transform="matrix(1,0,0,1,1620.45,1690.27)" id="304" ed:parentid="288" d="M-17.5,18.9C0.8,18.9,-3.1,-18.9,17.6,-18.9" stroke="#6cc9e5" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="305" transform="matrix(1,0,0,1,1620.45,1709.2)" id="306" ed:parentid="288" d="M-17.5,0C-3.5,0,7,0,17.6,0" stroke="#6cc9e5" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="307" transform="matrix(1,0,0,1,1620.45,1728.12)" id="308" ed:parentid="288" d="M-17.5,-18.9C0.8,-18.9,-3.1,18.9,17.6,18.9" stroke="#6cc9e5" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="309" transform="matrix(1,0,0,1,449.55,167.74)" id="310" ed:parentid="262" d="M17.5,9.5C1.3,9.5,-1.9,-9.5,-17.6,-9.5" stroke="#a98ae7" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="311" transform="matrix(1,0,0,1,449.55,186.67)" id="312" ed:parentid="262" d="M17.5,-9.5C1.3,-9.5,-1.9,9.5,-17.6,9.5" stroke="#a98ae7" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="313" transform="matrix(1,0,0,1,489.55,243.44)" id="314" ed:parentid="290" d="M17.5,9.5C1.3,9.5,-1.9,-9.5,-17.6,-9.5" stroke="#a98ae7" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="315" transform="matrix(1,0,0,1,489.55,262.37)" id="316" ed:parentid="290" d="M17.5,-9.5C1.3,-9.5,-1.9,9.5,-17.6,9.5" stroke="#a98ae7" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="318" transform="matrix(1,0,0,1,469.55,319.14)" id="319" ed:parentid="292" d="M17.5,9.5C1.3,9.5,-1.9,-9.5,-17.5,-9.5" stroke="#a98ae7" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="322" transform="matrix(1,0,0,1,469.55,338.07)" id="323" ed:parentid="292" d="M17.5,-9.5C1.3,-9.5,-1.9,9.5,-17.6,9.5" stroke="#a98ae7" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="324" transform="matrix(1,0,0,1,622.65,352.26)" id="325" ed:parentid="258" d="M17.5,-52C-6.2,-52,15.6,52,-17.5,52" stroke="#a98ae7" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="326" transform="matrix(1,0,0,1,622.65,390.11)" id="327" ed:parentid="258" d="M17.5,-89.9C-7,-89.9,17.5,89.9,-17.5,89.9" stroke="#a98ae7" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="332" transform="matrix(1,0,0,1,389.55,394.84)" id="333" ed:parentid="324" d="M17.5,9.5C1.3,9.5,-1.9,-9.5,-17.6,-9.5" stroke="#a98ae7" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="334" transform="matrix(1,0,0,1,389.55,413.77)" id="335" ed:parentid="324" d="M17.5,-9.5C1.3,-9.5,-1.9,9.5,-17.6,9.5" stroke="#a98ae7" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="336" transform="matrix(1,0,0,1,489.55,470.54)" id="337" ed:parentid="326" d="M17.5,9.5C1.3,9.5,-1.9,-9.5,-17.6,-9.5" stroke="#a98ae7" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="338" transform="matrix(1,0,0,1,489.55,489.47)" id="339" ed:parentid="326" d="M17.5,-9.5C1.3,-9.5,-1.9,9.5,-17.6,9.5" stroke="#a98ae7" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="340" transform="matrix(1,0,0,1,889.6,992.88)" id="341" ed:parentid="101" d="M18.3,20.1C18.6,18.3,17.7,16.9,16.4,16.7C15,16.4,13.7,17.4,13.4,19.1C12.9,21.4,12.5,23.7,12.1,26C11.7,28.3,11.3,30.6,10.8,32.9C10.4,35.2,10,37.5,9.5,39.8C9.1,42.1,8.6,44.3,8.2,46.6C7.8,48.9,7.3,51.2,6.8,53.5C6.4,55.8,5.9,58.1,5.4,60.3C5,62.6,4.5,64.9,4,67.2C3.5,69.4,3,71.7,2.5,74C2,76.3,1.5,78.5,1,80.8C0.4,83.1,-0.1,85.3,-0.6,87.6C-1.2,89.9,-1.7,92.1,-2.3,94.4C-2.9,96.6,-3.5,98.9,-4.1,101.1C-4.7,103.4,-5.3,105.6,-5.9,107.9C-6.5,110.1,-7.1,112.3,-7.8,114.6C-8.5,116.8,-9.1,119,-9.8,121.2C-10.5,123.5,-11.2,125.7,-11.9,127.9C-12.7,130.1,-13.4,132.3,-14.2,134.5C-14.9,136.7,-15.7,138.9,-16.5,141C-17.4,143.2,-18.2,145.4,-19.1,147.5C-19.9,149.7,-20.8,151.8,-21.7,154C-22.6,156.1,-23.6,158.2,-24.6,160.3C-25.5,162.4,-26.6,164.5,-27.6,166.6C-28.6,168.6,-29.7,170.7,-30.8,172.7C-32,174.8,-33.1,176.8,-34.3,178.8C-35.5,180.7,-36.7,182.7,-38,184.6C-39.3,186.6,-40.6,188.5,-42,190.3C-43.3,192.2,-44.8,194,-46.2,195.8C-47.7,197.6,-49.2,199.3,-50.8,201C-52.4,202.7,-54,204.4,-55.7,206C-57.3,207.5,-59.1,209.1,-60.9,210.5C-62.6,212,-64.5,213.4,-66.4,214.7C-68.3,216.1,-70.2,217.3,-72.2,218.5C-74.2,219.6,-76.2,220.7,-78.3,221.7C-80.4,222.7,-82.5,223.7,-84.7,224.5C-86.8,225.3,-89,226.1,-91.3,226.7C-93.5,227.4,-95.7,227.9,-98,228.4C-100.3,228.9,-102.5,229.2,-104.9,229.5C-107.2,229.8,-109.7,230.1,-111.8,230.2C-113.9,230.3,-115.6,230.4,-117.4,230.4C-117.8,230.4,-118,230.6,-118,230.9C-118,231.2,-117.8,231.4,-117.4,231.4C-115.6,231.4,-113.9,231.4,-111.7,231.3C-109.6,231.2,-107.1,231,-104.7,230.7C-102.3,230.4,-100,230.1,-97.7,229.7C-95.5,229.2,-93.1,228.7,-90.9,228C-88.6,227.4,-86.4,226.7,-84.2,225.9C-81.9,225.1,-79.8,224.2,-77.6,223.2C-75.5,222.2,-73.4,221.1,-71.4,220C-69.3,218.8,-67.3,217.5,-65.4,216.2C-63.4,214.9,-61.5,213.5,-59.7,212C-57.8,210.6,-56,209,-54.3,207.4C-52.6,205.8,-50.9,204.2,-49.3,202.5C-47.6,200.8,-46.1,199,-44.5,197.2C-43,195.4,-41.5,193.6,-40.1,191.7C-38.7,189.8,-37.3,187.9,-36,186C-34.7,184,-33.4,182.1,-32.1,180.1C-30.9,178.1,-29.7,176.1,-28.5,174C-27.4,172,-26.3,169.9,-25.2,167.8C-24.1,165.7,-23,163.6,-22,161.5C-21,159.4,-20,157.3,-19,155.1C-18.1,153,-17.1,150.8,-16.2,148.7C-15.3,146.5,-14.5,144.3,-13.6,142.2C-12.8,140,-11.9,137.8,-11.1,135.6C-10.3,133.4,-9.5,131.2,-8.8,129C-8,126.7,-7.3,124.5,-6.5,122.3C-5.8,120.1,-5.1,117.8,-4.4,115.6C-3.7,113.4,-3,111.1,-2.4,108.9C-1.7,106.6,-1.1,104.4,-0.4,102.1C0.2,99.9,0.8,97.6,1.4,95.3C2,93.1,2.6,90.8,3.2,88.6C3.8,86.3,4.4,84,4.9,81.7C5.5,79.5,6,77.2,6.6,74.9C7.1,72.7,7.6,70.4,8.2,68.1C8.7,65.8,9.2,63.5,9.7,61.3C10.2,59,10.7,56.7,11.2,54.4C11.7,52.1,12.2,49.8,12.7,47.5C13.2,45.3,13.7,43,14.1,40.7C14.6,38.4,15.1,36.1,15.5,33.8C16,31.5,16.5,29.2,16.9,27C17.4,24.7,17.8,22.4,18.3,20.1z" stroke="#80cf70" stroke-linejoin="round" fill="#80cf70" stroke-linecap="round"/>
    <path ed:tosuperid="342" transform="matrix(1,0,0,1,889.6,752.53)" id="343" ed:parentid="101" d="M-54.7,-3.1C-52.9,-2.9,-51.6,-3.9,-51.4,-5.3C-51.3,-6.6,-52.3,-7.9,-54.1,-8.1C-56.5,-8.2,-58.8,-8.4,-61.1,-8.5C-63.5,-8.7,-65.8,-8.9,-68.1,-9C-70.5,-9.1,-72.8,-9.3,-75.2,-9.4C-77.5,-9.5,-79.8,-9.6,-82.2,-9.7C-84.5,-9.8,-86.8,-9.9,-89.2,-9.9C-91.5,-10,-93.9,-10.1,-96.2,-10.1C-98.5,-10.1,-100.9,-10.2,-103.2,-10.2C-105.6,-10.2,-107.9,-10.2,-110.2,-10.1C-112.6,-10.1,-115,-10,-117.4,-10C-117.8,-10,-118,-9.7,-118,-9.5C-118,-9.2,-117.8,-9,-117.4,-9C-115,-8.9,-112.6,-8.8,-110.3,-8.7C-107.9,-8.6,-105.6,-8.4,-103.3,-8.3C-101,-8.1,-98.6,-8,-96.3,-7.8C-94,-7.6,-91.7,-7.4,-89.4,-7.2C-87,-6.9,-84.7,-6.7,-82.4,-6.5C-80.1,-6.2,-77.8,-6,-75.5,-5.7C-73.1,-5.5,-70.8,-5.2,-68.5,-4.9C-66.2,-4.6,-63.9,-4.3,-61.6,-4C-59.3,-3.7,-57,-3.4,-54.7,-3.1z" stroke="#fa8556" stroke-linejoin="round" fill="#fa8556" stroke-linecap="round"/>
    <path ed:tosuperid="344" transform="matrix(1,0,0,1,598.65,672.1)" id="345" ed:parentid="342" d="M17.5,71C-7,71,17.5,-71,-17.5,-71" stroke="#fa8556" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="346" transform="matrix(1,0,0,1,598.65,738.34)" id="347" ed:parentid="342" d="M17.5,4.7C2.4,4.7,-4.4,-4.7,-17.5,-4.7" stroke="#fa8556" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="348" transform="matrix(1,0,0,1,598.65,814.04)" id="349" ed:parentid="342" d="M17.5,-71C-7,-71,17.5,71,-17.5,71" stroke="#fa8556" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="350" transform="matrix(1,0,0,1,385.55,582.21)" id="351" ed:parentid="344" d="M17.5,18.9C-0.8,18.9,3.1,-18.9,-17.6,-18.9" stroke="#fa8556" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="352" transform="matrix(1,0,0,1,385.55,601.13)" id="353" ed:parentid="344" d="M17.5,0C3.5,0,-7,0,-17.6,0" stroke="#fa8556" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="354" transform="matrix(1,0,0,1,385.55,620.06)" id="355" ed:parentid="344" d="M17.5,-18.9C-0.8,-18.9,3.1,18.9,-17.6,18.9" stroke="#fa8556" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="356" transform="matrix(1,0,0,1,405.55,705.22)" id="357" ed:parentid="346" d="M17.5,28.4C-2.7,28.4,7.6,-28.4,-17.6,-28.4" stroke="#fa8556" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="358" transform="matrix(1,0,0,1,405.55,724.14)" id="359" ed:parentid="346" d="M17.5,9.5C1.3,9.5,-1.9,-9.5,-17.6,-9.5" stroke="#fa8556" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="360" transform="matrix(1,0,0,1,405.55,743.07)" id="361" ed:parentid="346" d="M17.6,-9.5C1.3,-9.5,-1.9,9.5,-17.6,9.5" stroke="#fa8556" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="362" transform="matrix(1,0,0,1,405.55,761.99)" id="363" ed:parentid="346" d="M17.5,-28.4C-2.7,-28.4,7.6,28.4,-17.5,28.4" stroke="#fa8556" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="364" transform="matrix(1,0,0,1,373.55,856.62)" id="365" ed:parentid="348" d="M17.5,28.4C-2.7,28.4,7.6,-28.4,-17.6,-28.4" stroke="#fa8556" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="366" transform="matrix(1,0,0,1,373.55,875.54)" id="367" ed:parentid="348" d="M17.5,9.5C1.3,9.5,-1.9,-9.5,-17.6,-9.5" stroke="#fa8556" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="368" transform="matrix(1,0,0,1,373.55,894.47)" id="369" ed:parentid="348" d="M17.5,-9.5C1.3,-9.5,-1.9,9.5,-17.6,9.5" stroke="#fa8556" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="370" transform="matrix(1,0,0,1,373.55,913.39)" id="371" ed:parentid="348" d="M17.5,-28.4C-2.7,-28.4,7.6,28.4,-17.6,28.4" stroke="#fa8556" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="372" transform="matrix(1,0,0,1,550.65,1133.87)" id="373" ed:parentid="340" d="M17.5,89.9C-7,89.9,17.5,-89.9,-17.5,-89.9" stroke="#80cf70" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="374" transform="matrix(1,0,0,1,550.65,1181.19)" id="375" ed:parentid="340" d="M17.5,42.6C-5.1,42.6,13,-42.6,-17.5,-42.6" stroke="#80cf70" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="376" transform="matrix(1,0,0,1,550.65,1219.04)" id="377" ed:parentid="340" d="M17.5,4.7C2.4,4.7,-4.4,-4.7,-17.5,-4.7" stroke="#80cf70" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="378" transform="matrix(1,0,0,1,550.65,1247.42)" id="379" ed:parentid="340" d="M17.5,-23.7C-1.8,-23.7,5.4,23.7,-17.5,23.7" stroke="#80cf70" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="380" transform="matrix(1,0,0,1,550.65,1275.81)" id="381" ed:parentid="340" d="M17.5,-52C-6.2,-52,15.6,52,-17.5,52" stroke="#80cf70" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="382" transform="matrix(1,0,0,1,550.65,1313.66)" id="383" ed:parentid="340" d="M17.5,-89.9C-7,-89.9,17.5,89.9,-17.5,89.9" stroke="#80cf70" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="384" transform="matrix(1,0,0,1,417.55,1025.06)" id="385" ed:parentid="372" d="M17.5,18.9C-0.8,18.9,3.1,-18.9,-17.6,-18.9" stroke="#80cf70" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="386" transform="matrix(1,0,0,1,417.55,1043.98)" id="387" ed:parentid="372" d="M17.5,0C3.5,0,-7,0,-17.6,0" stroke="#80cf70" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="388" transform="matrix(1,0,0,1,417.55,1062.91)" id="389" ed:parentid="372" d="M17.5,-18.9C-0.8,-18.9,3.1,18.9,-17.6,18.9" stroke="#80cf70" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="390" transform="matrix(1,0,0,1,417.55,1129.14)" id="391" ed:parentid="374" d="M17.5,9.5C1.3,9.5,-1.9,-9.5,-17.6,-9.5" stroke="#80cf70" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="392" transform="matrix(1,0,0,1,417.55,1148.07)" id="393" ed:parentid="374" d="M17.5,-9.5C1.3,-9.5,-1.9,9.5,-17.6,9.5" stroke="#80cf70" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="394" transform="matrix(1,0,0,1,417.55,1204.84)" id="395" ed:parentid="376" d="M17.5,9.5C1.3,9.5,-1.9,-9.5,-17.6,-9.5" stroke="#80cf70" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="396" transform="matrix(1,0,0,1,417.55,1223.77)" id="397" ed:parentid="376" d="M17.5,-9.5C1.3,-9.5,-1.9,9.5,-17.6,9.5" stroke="#80cf70" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="398" transform="matrix(1,0,0,1,417.55,1318.39)" id="399" ed:parentid="380" d="M17.5,9.5C1.3,9.5,-1.9,-9.5,-17.6,-9.5" stroke="#80cf70" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="400" transform="matrix(1,0,0,1,417.55,1337.32)" id="401" ed:parentid="380" d="M17.5,-9.5C1.3,-9.5,-1.9,9.5,-17.6,9.5" stroke="#80cf70" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="402" transform="matrix(1,0,0,1,277.55,1394.09)" id="403" ed:parentid="382" d="M17.5,9.5C1.3,9.5,-1.9,-9.5,-17.6,-9.5" stroke="#80cf70" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <path ed:tosuperid="404" transform="matrix(1,0,0,1,277.55,1413.02)" id="405" ed:parentid="382" d="M17.5,-9.5C1.3,-9.5,-1.9,9.5,-17.6,9.5" stroke="#80cf70" stroke-width="2" stroke-linejoin="round" fill="none" stroke-linecap="round"/>
    <g transform="matrix(1,0,0,1,835.2,511.49)" ed:width="343.6" ed:layout="map" ed:topictype="mainidea" id="101" ed:height="501">
        <path d="M4,0L339.6,0C342.3,0,343.6,1.3,343.6,4L343.6,497C343.6,499.7,342.3,501,339.6,501L4,501C1.3,501,0,499.7,0,497L0,4C0,1.3,1.3,0,4,0z" stroke="#ffffff" stroke-width="4" stroke-linejoin="round" fill="#ffffff"/>
        <image width="297.6" xlink:href="" height="468" x="17" id="shape3" y="15"/>
        <text class="st10"/>
    </g>
    <g transform="matrix(1,0,0,1,1241.8,45.25)" ed:width="156" ed:layout="rightmap" id="122" ed:parentid="101" ed:height="43.95">
        <path d="M0,44L156,44" stroke="#ff7575" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st11">
            <tspan style="white-space:pre" x="17" y="31.4">第一章绪论</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1241.8,533.53)" ed:width="204" ed:layout="rightmap" id="139" ed:parentid="101" ed:height="43.95">
        <path d="M0,44L204,44" stroke="#ffcd55" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st11">
            <tspan style="white-space:pre" x="17" y="31.4">第三章栈和队列</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1241.8,862.83)" ed:width="348" ed:layout="rightmap" id="145" ed:parentid="101" ed:height="43.95">
        <path d="M0,44L348,44" stroke="#f1a3dc" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st11">
            <tspan style="white-space:pre" x="17" y="31.4">第四章串、多维数组与广义表</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1241.8,232.61)" ed:width="180" ed:layout="rightmap" id="147" ed:parentid="101" ed:height="43.95">
        <path d="M0,44L180,44" stroke="#5fb7f1" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st11">
            <tspan style="white-space:pre" x="17" y="31.4">第二章线性表</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1432.9,20)" ed:width="238" ed:layout="rightmap" id="151" ed:parentid="122" ed:height="31.35">
        <path d="M0,31.4L238,31.4" stroke="#ff7575" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" class="st13" x="8" y="23.8">数据逻辑结构，物理结构</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1456.9,178.98)" ed:width="178" ed:layout="rightmap" id="165" ed:parentid="147" ed:height="31.35">
        <path d="M0,31.4L178,31.4" stroke="#5fb7f1" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">线性表的类型定义</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1456.9,311.45)" ed:width="198" ed:layout="rightmap" id="167" ed:parentid="147" ed:height="31.35">
        <path d="M0,31.4L198,31.4" stroke="#5fb7f1" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">线性表的存储及实现</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1690,273.6)" ed:width="78" ed:layout="rightmap" id="169" ed:parentid="167" ed:height="31.35">
        <path d="M0,31.4L78,31.4" stroke="#5fb7f1" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">单链表</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1554,451.5)" ed:width="98" ed:layout="rightmap" id="177" ed:parentid="231" ed:height="31.35">
        <path d="M0,31.4L98,31.4" stroke="#ffcd55" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">栈的定义</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1554,489.35)" ed:width="178" ed:layout="rightmap" id="179" ed:parentid="231" ed:height="31.35">
        <path d="M0,31.4L178,31.4" stroke="#ffcd55" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">栈的顺序存储结构</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1554,527.2)" ed:width="178" ed:layout="rightmap" id="181" ed:parentid="231" ed:height="31.35">
        <path d="M0,31.4L178,31.4" stroke="#ffcd55" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">栈的链式存储结构</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1624.9,742.95)" ed:width="38" ed:layout="rightmap" id="185" ed:parentid="145" ed:height="31.35">
        <path d="M0,31.4L38,31.4" stroke="#f1a3dc" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">串</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1624.9,837.58)" ed:width="58" ed:layout="rightmap" id="191" ed:parentid="145" ed:height="31.35">
        <path d="M0,31.4L58,31.4" stroke="#f1a3dc" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">数组</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1624.9,913.28)" ed:width="158" ed:layout="rightmap" id="193" ed:parentid="145" ed:height="31.35">
        <path d="M0,31.4L158,31.4" stroke="#f1a3dc" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">矩阵的压缩存储</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1241.8,1390.84)" ed:width="228" ed:layout="rightmap" id="246" ed:parentid="101" ed:height="43.95">
        <path d="M0,44L228,44" stroke="#6cc9e5" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st11">
            <tspan style="white-space:pre" x="17" y="31.4">第五章树和二叉树</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1504.9,1375.05)" ed:width="238" ed:layout="rightmap" id="252" ed:parentid="246" ed:height="31.35">
        <path d="M0,31.4L238,31.4" stroke="#6cc9e5" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">遍历二叉树和线索二叉树</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1504.9,1545.38)" ed:width="98" ed:layout="rightmap" id="254" ed:parentid="246" ed:height="31.35">
        <path d="M0,31.4L98,31.4" stroke="#6cc9e5" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">树和森林</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,640.2,256.27)" ed:width="132" ed:layout="leftmap" id="258" ed:parentid="101" ed:height="43.95">
        <path d="M0,44L132,44" stroke="#a98ae7" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st11">
            <tspan style="white-space:pre" x="17" y="31.4">第六章图</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,467.1,89.08)" ed:width="138" ed:layout="leftmap" id="260" ed:parentid="258" ed:height="31.35">
        <path d="M0,31.4L138,31.4" stroke="#a98ae7" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">图的基本概念</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,467.1,145.86)" ed:width="138" ed:layout="leftmap" id="262" ed:parentid="258" ed:height="31.35">
        <path d="M0,31.4L138,31.4" stroke="#a98ae7" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">图的存储结构</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1432.9,57.85)" ed:width="238" ed:layout="rightmap" id="159" ed:parentid="122" ed:height="31.35">
        <path d="M0,31.4L238,31.4" stroke="#ff7575" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">数据类型和抽象数据类型</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1480.9,489.35)" ed:width="38" ed:layout="rightmap" id="231" ed:parentid="139" ed:height="31.35">
        <path d="M0,31.4L38,31.4" stroke="#ffcd55" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">栈</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1504.9,1129.03)" ed:width="138" ed:layout="rightmap" id="235" ed:parentid="246" ed:height="31.35">
        <path d="M0,31.4L138,31.4" stroke="#6cc9e5" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">树的基本概念</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1504.9,1223.65)" ed:width="78" ed:layout="rightmap" id="237" ed:parentid="246" ed:height="31.35">
        <path d="M0,31.4L78,31.4" stroke="#6cc9e5" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">二叉树</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1432.9,95.7)" ed:width="278" ed:layout="rightmap" id="276" ed:parentid="122" ed:height="31.35">
        <path d="M0,31.4L278,31.4" stroke="#ff7575" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">算法设计目标和算法效率度量</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1624.9,1007.9)" ed:width="78" ed:layout="rightmap" id="284" ed:parentid="145" ed:height="31.35">
        <path d="M0,31.4L78,31.4" stroke="#f1a3dc" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">广义表</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1504.9,1677.85)" ed:width="98" ed:layout="rightmap" id="288" ed:parentid="246" ed:height="31.35">
        <path d="M0,31.4L98,31.4" stroke="#6cc9e5" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">哈夫曼树</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,507.1,221.56)" ed:width="98" ed:layout="leftmap" id="290" ed:parentid="258" ed:height="31.35">
        <path d="M0,31.4L98,31.4" stroke="#a98ae7" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">图的遍历</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,487.1,297.26)" ed:width="118" ed:layout="leftmap" id="292" ed:parentid="258" ed:height="31.35">
        <path d="M0,31.4L118,31.4" stroke="#a98ae7" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">最小生成树</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1690,311.45)" ed:width="118" ed:layout="rightmap" id="190" ed:parentid="167" ed:height="31.35">
        <path d="M0,31.4L118,31.4" stroke="#5fb7f1" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">循环单链表</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1690,349.3)" ed:width="98" ed:layout="rightmap" id="196" ed:parentid="167" ed:height="31.35">
        <path d="M0,31.4L98,31.4" stroke="#5fb7f1" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">双向链表</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1480.9,602.9)" ed:width="58" ed:layout="rightmap" id="203" ed:parentid="139" ed:height="31.35">
        <path d="M0,31.4L58,31.4" stroke="#ffcd55" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">队列</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1574,565.05)" ed:width="118" ed:layout="rightmap" id="205" ed:parentid="203" ed:height="31.35">
        <path d="M0,31.4L118,31.4" stroke="#ffcd55" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">队列的定义</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1574,602.9)" ed:width="198" ed:layout="rightmap" id="206" ed:parentid="203" ed:height="31.35">
        <path d="M0,31.4L198,31.4" stroke="#ffcd55" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">队列的顺序存储结构</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1574,640.75)" ed:width="198" ed:layout="rightmap" id="207" ed:parentid="203" ed:height="31.35">
        <path d="M0,31.4L198,31.4" stroke="#ffcd55" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">队列的链式存储结构</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1690,235.75)" ed:width="78" ed:layout="rightmap" id="211" ed:parentid="167" ed:height="31.35">
        <path d="M0,31.4L78,31.4" stroke="#5fb7f1" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">顺序表</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1690,387.15)" ed:width="98" ed:layout="rightmap" id="213" ed:parentid="167" ed:height="31.35">
        <path d="M0,31.4L98,31.4" stroke="#5fb7f1" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">静态链表</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1670,160.05)" ed:width="138" ed:layout="rightmap" id="215" ed:parentid="165" ed:height="31.35">
        <path d="M0,31.4L138,31.4" stroke="#5fb7f1" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">线性表的定义</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1670,197.9)" ed:width="178" ed:layout="rightmap" id="217" ed:parentid="165" ed:height="31.35">
        <path d="M0,31.4L178,31.4" stroke="#5fb7f1" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">线性表的基本运算</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1698,705.1)" ed:width="98" ed:layout="rightmap" id="221" ed:parentid="185" ed:height="31.35">
        <path d="M0,31.4L98,31.4" stroke="#f1a3dc" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">串的定义</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1698,742.95)" ed:width="158" ed:layout="rightmap" id="223" ed:parentid="185" ed:height="31.35">
        <path d="M0,31.4L158,31.4" stroke="#f1a3dc" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">串的表示和实现</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1698,780.8)" ed:width="178" ed:layout="rightmap" id="225" ed:parentid="185" ed:height="31.35">
        <path d="M0,31.4L178,31.4" stroke="#f1a3dc" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">串的模式匹配算法</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1718,818.65)" ed:width="118" ed:layout="rightmap" id="227" ed:parentid="191" ed:height="31.35">
        <path d="M0,31.4L118,31.4" stroke="#f1a3dc" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">数组的定义</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1718,856.5)" ed:width="198" ed:layout="rightmap" id="229" ed:parentid="191" ed:height="31.35">
        <path d="M0,31.4L198,31.4" stroke="#f1a3dc" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">数组的顺序存储结构</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1818,894.35)" ed:width="98" ed:layout="rightmap" id="239" ed:parentid="193" ed:height="31.35">
        <path d="M0,31.4L98,31.4" stroke="#f1a3dc" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">特殊矩阵</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1818,932.2)" ed:width="98" ed:layout="rightmap" id="241" ed:parentid="193" ed:height="31.35">
        <path d="M0,31.4L98,31.4" stroke="#f1a3dc" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">稀疏矩阵</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1738,970.05)" ed:width="118" ed:layout="rightmap" id="243" ed:parentid="284" ed:height="31.35">
        <path d="M0,31.4L118,31.4" stroke="#f1a3dc" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">广义表定义</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1738,1007.9)" ed:width="178" ed:layout="rightmap" id="249" ed:parentid="284" ed:height="31.35">
        <path d="M0,31.4L178,31.4" stroke="#f1a3dc" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">广义表的基本操作</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1738,1045.75)" ed:width="178" ed:layout="rightmap" id="251" ed:parentid="284" ed:height="31.35">
        <path d="M0,31.4L178,31.4" stroke="#f1a3dc" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">广义表的存储结构</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1678,1110.1)" ed:width="98" ed:layout="rightmap" id="265" ed:parentid="235" ed:height="31.35">
        <path d="M0,31.4L98,31.4" stroke="#6cc9e5" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">树的定义</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1678,1147.95)" ed:width="138" ed:layout="rightmap" id="267" ed:parentid="235" ed:height="31.35">
        <path d="M0,31.4L138,31.4" stroke="#6cc9e5" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">树的基本术语</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1618,1185.8)" ed:width="138" ed:layout="rightmap" id="269" ed:parentid="237" ed:height="31.35">
        <path d="M0,31.4L138,31.4" stroke="#6cc9e5" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">二叉树的定义</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1618,1223.65)" ed:width="138" ed:layout="rightmap" id="271" ed:parentid="237" ed:height="31.35">
        <path d="M0,31.4L138,31.4" stroke="#6cc9e5" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">二叉树的性质</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1618,1261.5)" ed:width="178" ed:layout="rightmap" id="273" ed:parentid="237" ed:height="31.35">
        <path d="M0,31.4L178,31.4" stroke="#6cc9e5" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">二叉树的存储结构</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1778,1299.35)" ed:width="278" ed:layout="rightmap" id="275" ed:parentid="252" ed:height="31.35">
        <path d="M0,31.4L278,31.4" stroke="#6cc9e5" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">二叉树的遍历方法及递归实现</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1778,1337.2)" ed:width="238" ed:layout="rightmap" id="279" ed:parentid="252" ed:height="31.35">
        <path d="M0,31.4L238,31.4" stroke="#6cc9e5" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">二叉树遍历的非递归实现</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1778,1375.05)" ed:width="158" ed:layout="rightmap" id="281" ed:parentid="252" ed:height="31.35">
        <path d="M0,31.4L158,31.4" stroke="#6cc9e5" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">遍历算法的应用</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1778,1412.9)" ed:width="218" ed:layout="rightmap" id="283" ed:parentid="252" ed:height="31.35">
        <path d="M0,31.4L218,31.4" stroke="#6cc9e5" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">由遍历序列构造二叉树</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1778,1450.75)" ed:width="118" ed:layout="rightmap" id="287" ed:parentid="252" ed:height="31.35">
        <path d="M0,31.4L118,31.4" stroke="#6cc9e5" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">线索二叉树</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1638,1488.6)" ed:width="138" ed:layout="rightmap" id="295" ed:parentid="254" ed:height="31.35">
        <path d="M0,31.4L138,31.4" stroke="#6cc9e5" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">树的存储结构</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1638,1526.45)" ed:width="178" ed:layout="rightmap" id="297" ed:parentid="254" ed:height="31.35">
        <path d="M0,31.4L178,31.4" stroke="#6cc9e5" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">树与二叉树的转换</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1638,1564.3)" ed:width="198" ed:layout="rightmap" id="299" ed:parentid="254" ed:height="31.35">
        <path d="M0,31.4L198,31.4" stroke="#6cc9e5" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">森林与二叉树的转换</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1638,1602.15)" ed:width="158" ed:layout="rightmap" id="301" ed:parentid="254" ed:height="31.35">
        <path d="M0,31.4L158,31.4" stroke="#6cc9e5" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">树和森林的遍历</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1638,1640)" ed:width="198" ed:layout="rightmap" id="303" ed:parentid="288" ed:height="31.35">
        <path d="M0,31.4L198,31.4" stroke="#6cc9e5" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">哈夫曼树的基本概念</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1638,1677.85)" ed:width="198" ed:layout="rightmap" id="305" ed:parentid="288" ed:height="31.35">
        <path d="M0,31.4L198,31.4" stroke="#6cc9e5" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">哈夫曼树的构造方法</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1638,1715.7)" ed:width="118" ed:layout="rightmap" id="307" ed:parentid="288" ed:height="31.35">
        <path d="M0,31.4L118,31.4" stroke="#6cc9e5" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">哈夫曼编码</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,334,126.93)" ed:width="98" ed:layout="leftmap" id="309" ed:parentid="262" ed:height="31.35">
        <path d="M0,31.4L98,31.4" stroke="#a98ae7" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">邻接矩阵</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,354,164.78)" ed:width="78" ed:layout="leftmap" id="311" ed:parentid="262" ed:height="31.35">
        <path d="M0,31.4L78,31.4" stroke="#a98ae7" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">邻接表</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,334,202.63)" ed:width="138" ed:layout="leftmap" id="313" ed:parentid="290" ed:height="31.35">
        <path d="M0,31.4L138,31.4" stroke="#a98ae7" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">深度优先搜索</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,334,240.48)" ed:width="138" ed:layout="leftmap" id="315" ed:parentid="290" ed:height="31.35">
        <path d="M0,31.4L138,31.4" stroke="#a98ae7" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">广度优先搜索</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,216.4,278.33)" ed:width="235.6" ed:layout="leftmap" id="318" ed:parentid="292" ed:height="31.35">
        <path d="M0,31.4L235.6,31.4" stroke="#a98ae7" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">Prim算法构造最小生成树</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,194,316.18)" ed:width="258" ed:layout="leftmap" id="322" ed:parentid="292" ed:height="31.35">
        <path d="M0,31.4L258,31.4" stroke="#a98ae7" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">Kruskal算法构造最小生成树</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,407.1,372.96)" ed:width="198" ed:layout="leftmap" id="324" ed:parentid="258" ed:height="31.35">
        <path d="M0,31.4L198,31.4" stroke="#a98ae7" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">有向无环图及其应用</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,507.1,448.66)" ed:width="98" ed:layout="leftmap" id="326" ed:parentid="258" ed:height="31.35">
        <path d="M0,31.4L98,31.4" stroke="#a98ae7" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">最短路径</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,274,354.03)" ed:width="98" ed:layout="leftmap" id="332" ed:parentid="324" ed:height="31.35">
        <path d="M0,31.4L98,31.4" stroke="#a98ae7" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">拓扑排序</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,274,391.88)" ed:width="98" ed:layout="leftmap" id="334" ed:parentid="324" ed:height="31.35">
        <path d="M0,31.4L98,31.4" stroke="#a98ae7" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">关键路径</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,294,429.73)" ed:width="178" ed:layout="leftmap" id="336" ed:parentid="326" ed:height="31.35">
        <path d="M0,31.4L178,31.4" stroke="#a98ae7" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">单源点的最短路径</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,234,467.58)" ed:width="238" ed:layout="leftmap" id="338" ed:parentid="326" ed:height="31.35">
        <path d="M0,31.4L238,31.4" stroke="#a98ae7" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">每对顶点之间的最短路径</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,568.2,1179.82)" ed:width="204" ed:layout="leftmap" id="340" ed:parentid="101" ed:height="43.95">
        <path d="M0,44L204,44" stroke="#80cf70" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st11">
            <tspan style="white-space:pre" x="17" y="31.4">第八章内部排序</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,616.2,699.12)" ed:width="156" ed:layout="leftmap" id="342" ed:parentid="101" ed:height="43.95">
        <path d="M0,44L156,44" stroke="#fa8556" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st11">
            <tspan style="white-space:pre" x="17" y="31.4">第七章查找</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,403.1,569.78)" ed:width="178" ed:layout="leftmap" id="344" ed:parentid="342" ed:height="31.35">
        <path d="M0,31.4L178,31.4" stroke="#fa8556" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">顺序表的静态查找</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,423.1,702.26)" ed:width="158" ed:layout="leftmap" id="346" ed:parentid="342" ed:height="31.35">
        <path d="M0,31.4L158,31.4" stroke="#fa8556" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">树表的动态查找</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,391.1,853.66)" ed:width="190" ed:layout="leftmap" id="348" ed:parentid="342" ed:height="31.35">
        <path d="M0,31.4L190,31.4" stroke="#fa8556" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">散列(Hash)表的查找</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,270,531.93)" ed:width="98" ed:layout="leftmap" id="350" ed:parentid="344" ed:height="31.35">
        <path d="M0,31.4L98,31.4" stroke="#fa8556" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">顺序查找</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,270,569.78)" ed:width="98" ed:layout="leftmap" id="352" ed:parentid="344" ed:height="31.35">
        <path d="M0,31.4L98,31.4" stroke="#fa8556" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">折半查找</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,270,607.63)" ed:width="98" ed:layout="leftmap" id="354" ed:parentid="344" ed:height="31.35">
        <path d="M0,31.4L98,31.4" stroke="#fa8556" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">分块查找</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,290,645.48)" ed:width="98" ed:layout="leftmap" id="356" ed:parentid="346" ed:height="31.35">
        <path d="M0,31.4L98,31.4" stroke="#fa8556" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">叉排序树</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,270,683.33)" ed:width="118" ed:layout="leftmap" id="358" ed:parentid="346" ed:height="31.35">
        <path d="M0,31.4L118,31.4" stroke="#fa8556" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">平衡二叉树</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,331.6,721.18)" ed:width="56.40000000000001" ed:layout="leftmap" id="360" ed:parentid="346" ed:height="31.35">
        <path d="M0,31.4L56.4,31.4" stroke="#fa8556" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">B-树</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,324.4,759.03)" ed:width="63.59999999999999" ed:layout="leftmap" id="362" ed:parentid="346" ed:height="31.35">
        <path d="M0,31.4L63.6,31.4" stroke="#fa8556" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">B+树</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,178,796.88)" ed:width="178" ed:layout="leftmap" id="364" ed:parentid="348" ed:height="31.35">
        <path d="M0,31.4L178,31.4" stroke="#fa8556" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">散列表的基本概念</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,178,834.73)" ed:width="178" ed:layout="leftmap" id="366" ed:parentid="348" ed:height="31.35">
        <path d="M0,31.4L178,31.4" stroke="#fa8556" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">散列函数构造方法</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,198,872.58)" ed:width="158" ed:layout="leftmap" id="368" ed:parentid="348" ed:height="31.35">
        <path d="M0,31.4L158,31.4" stroke="#fa8556" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">处理冲突的方法</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,138,910.43)" ed:width="218" ed:layout="leftmap" id="370" ed:parentid="348" ed:height="31.35">
        <path d="M0,31.4L218,31.4" stroke="#fa8556" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">散列表的查找及其分析</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,435.1,1012.63)" ed:width="98" ed:layout="leftmap" id="372" ed:parentid="340" ed:height="31.35">
        <path d="M0,31.4L98,31.4" stroke="#80cf70" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">插入排序</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,435.1,1107.26)" ed:width="98" ed:layout="leftmap" id="374" ed:parentid="340" ed:height="31.35">
        <path d="M0,31.4L98,31.4" stroke="#80cf70" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">交换排序</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,435.1,1182.96)" ed:width="98" ed:layout="leftmap" id="376" ed:parentid="340" ed:height="31.35">
        <path d="M0,31.4L98,31.4" stroke="#80cf70" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">选择排序</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,435.1,1239.73)" ed:width="98" ed:layout="leftmap" id="378" ed:parentid="340" ed:height="31.35">
        <path d="M0,31.4L98,31.4" stroke="#80cf70" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">归并排序</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,435.1,1296.51)" ed:width="98" ed:layout="leftmap" id="380" ed:parentid="340" ed:height="31.35">
        <path d="M0,31.4L98,31.4" stroke="#80cf70" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">基数排序</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,295.1,1372.21)" ed:width="238" ed:layout="leftmap" id="382" ed:parentid="340" ed:height="31.35">
        <path d="M0,31.4L238,31.4" stroke="#80cf70" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">各种内部排序算法的比较</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,262,974.78)" ed:width="138" ed:layout="leftmap" id="384" ed:parentid="372" ed:height="31.35">
        <path d="M0,31.4L138,31.4" stroke="#80cf70" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">直接插入排序</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,262,1012.63)" ed:width="138" ed:layout="leftmap" id="386" ed:parentid="372" ed:height="31.35">
        <path d="M0,31.4L138,31.4" stroke="#80cf70" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">折半插入排序</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,302,1050.48)" ed:width="98" ed:layout="leftmap" id="388" ed:parentid="372" ed:height="31.35">
        <path d="M0,31.4L98,31.4" stroke="#80cf70" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">希尔排序</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,302,1088.33)" ed:width="98" ed:layout="leftmap" id="390" ed:parentid="374" ed:height="31.35">
        <path d="M0,31.4L98,31.4" stroke="#80cf70" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">冒泡排序</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,302,1126.18)" ed:width="98" ed:layout="leftmap" id="392" ed:parentid="374" ed:height="31.35">
        <path d="M0,31.4L98,31.4" stroke="#80cf70" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">快速排序</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,262,1164.03)" ed:width="138" ed:layout="leftmap" id="394" ed:parentid="376" ed:height="31.35">
        <path d="M0,31.4L138,31.4" stroke="#80cf70" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">直接选择排序</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,322,1201.88)" ed:width="78" ed:layout="leftmap" id="396" ed:parentid="376" ed:height="31.35">
        <path d="M0,31.4L78,31.4" stroke="#80cf70" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">堆排序</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,262,1277.58)" ed:width="138" ed:layout="leftmap" id="398" ed:parentid="380" ed:height="31.35">
        <path d="M0,31.4L138,31.4" stroke="#80cf70" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">多关键码排序</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,262,1315.43)" ed:width="138" ed:layout="leftmap" id="400" ed:parentid="380" ed:height="31.35">
        <path d="M0,31.4L138,31.4" stroke="#80cf70" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">链式基数排序</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,22,1353.28)" ed:width="238" ed:layout="leftmap" id="402" ed:parentid="382" ed:height="31.35">
        <path d="M0,31.4L238,31.4" stroke="#80cf70" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">内部排序算法的性能比较</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,22,1391.13)" ed:width="238" ed:layout="leftmap" id="404" ed:parentid="382" ed:height="31.35">
        <path d="M0,31.4L238,31.4" stroke="#80cf70" stroke-width="2" stroke-linejoin="round" fill="none"/>
        <text class="st12">
            <tspan style="white-space:pre" x="8" y="23.8">各种内部排序算法的选择</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,738.13,113.8)" ed:width="328.8" ed:layout="leftmap" ed:topictype="floating" id="406" ed:height="72.8">
        <path d="M4,0L324.8,0C327.5,0,328.8,1.3,328.8,4L328.8,68.8C328.8,71.5,327.5,72.8,324.8,72.8L4,72.8C1.3,72.8,0,71.5,0,68.8L0,4C0,1.3,1.3,0,4,0z" stroke="#a98ae7" stroke-linejoin="round" fill="#ff0000"/>
        <text class="st14">
            <tspan style="white-space:pre" x="18" y="54.1">期末考点总结</tspan>
        </text>
        <g ed:hyperlink="[&#xa;    {&#xa;        &quot;desc&quot;: &quot;&quot;,&#xa;        &quot;link&quot;: &quot;https://kdocs.cn/l/cvU84FKnGNVN&quot;&#xa;    }&#xa;]&#xa;">
            <use xlink:href="#imghyperlink" transform="translate(294,28)"/>
        </g>
    </g>
    <symbol id="imghyperlink">
        <image width="16" xlink:href="" height="16"/>
    </symbol>
</svg>
</div>
        <div id="copyright">Created With  <a href="https://www.edrawsoft.com/" target="_blank" title="edrawsoft">MindMaster</a></div>
      </div>
    </div>
    <script>eval(atob('dmFyIG11YSA9IHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50Ow0KdmFyIHVhID0gKG11YS5pbmRleE9mKCdydjoxMScpICsgbXVhLmluZGV4T2YoJ01TSUUnKSkgPj0gMDsNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdmctY29udGFpbmVyJykub25jb250ZXh0bWVudSA9IGZ1bmN0aW9uIChldmVudCkgew0KICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7DQp9DQpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3ZnLWNvbnRhaW5lcicpLm9ubW91c2Vkb3duID0gZnVuY3Rpb24gKGV2ZW50KSB7DQogICAgaWYgKGV2ZW50LndoaWNoID09IDMpIHsNCiAgICAgICAgdGhpcy5zdHlsZS5jdXJzb3IgPSAncG9pbnRlcic7DQogICAgICAgIHRoaXMub25tb3VzZW1vdmUgPSBmdW5jdGlvbiAoZXYpIHsNCiAgICAgICAgICAgIHRoaXMuc2Nyb2xsQnkoLShldi5tb3ZlbWVudFgpLCAwKTsNCiAgICAgICAgICAgIHdpbmRvdy5zY3JvbGxCeSgwLCAtKGV2Lm1vdmVtZW50WSkpDQogICAgICAgIH0NCiAgICAgICAgdGhpcy5vbm1vdXNldXAgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB0aGlzLnN0eWxlLmN1cnNvciA9IG51bGw7DQogICAgICAgICAgICB0aGlzLm9ubW91c2V1cCA9IG51bGw7DQogICAgICAgICAgICB0aGlzLm9ubW91c2Vtb3ZlID0gbnVsbDsNCiAgICAgICAgfQ0KICAgIH0NCn0NCk51bWJlci5wcm90b3R5cGUudG9zdWl0c3ZnID0gZnVuY3Rpb24gKCkgew0KICAgIHZhciBudW0gPSB0aGlzLnZhbHVlT2YoKTsNCiAgICBpZiAobnVtICUgMSA9PT0gMCkgew0KICAgICAgICByZXR1cm4gbnVtICsgMC41DQogICAgfSBlbHNlIHJldHVybiBudW07DQp9Ow0KTnVtYmVyLnByb3RvdHlwZS5wbHVzeiA9IGZ1bmN0aW9uICgpIHsNCiAgICB2YXIgbnVtID0gdGhpcy52YWx1ZU9mKCk7DQogICAgcmV0dXJuIG51bSA8IDEwID8gJzAnICsgbnVtIDogbnVtOw0KfTsNCmZ1bmN0aW9uIHBhcnNlRGF0ZShudW0pIHsNCiAgICB2YXIgZGF0ZSA9IG5ldyBEYXRlKG51bSk7DQogICAgdmFyIFkgPSBkYXRlLmdldEZ1bGxZZWFyKCkgKyAnLSc7DQogICAgdmFyIE0gPSAoZGF0ZS5nZXRNb250aCgpICsgMSkucGx1c3ooKSArICctJzsNCiAgICB2YXIgRCA9IGRhdGUuZ2V0RGF0ZSgpLnBsdXN6KCkgKyAnICc7DQogICAgdmFyIGggPSBkYXRlLmdldEhvdXJzKCkucGx1c3ooKSArICc6JzsNCiAgICB2YXIgbW0gPSBkYXRlLmdldE1pbnV0ZXMoKS5wbHVzeigpICsgJzonOw0KICAgIHZhciBzID0gZGF0ZS5nZXRTZWNvbmRzKCkucGx1c3ooKTsNCiAgICByZXR1cm4gWSArIE0gKyBEICsgaCArIG1tICsgczsNCn0NCi8vLS1wcmVkZWZpbmVkDQovL2NvbW1lbnQtLQ0KDQpmdW5jdGlvbiBnZXRjd2gocG9wdXApIHsNCiAgICBkb2N1bWVudC5ib2R5LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzdmcnKVswXS5hcHBlbmRDaGlsZChwb3B1cCk7DQogICAgdmFyIHcgPSBwb3B1cC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDsNCiAgICB2YXIgaCA9IHBvcHVwLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDsNCiAgICByZXR1cm4gW3csIGhdDQp9DQpzdmdFbGVtcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoInN2ZyIpOw0KZm9yIChsZXQgaW5kZXggPSAxOyBpbmRleCA8PSBzdmdFbGVtcy5sZW5ndGg7IGluZGV4KyspIHsNCiAgICAvLyB2YXIgY29tbWVudHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdzdmc6bnRoLWNoaWxkKCcgKyBpbmRleCArICcpIGc+Z1tlZFxcOmNvbW1lbnRdJyk7DQogICAgdmFyIGNvbW1lbnRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgc3ZnOm50aC1jaGlsZCgke2luZGV4fSkgZz5nW2VkXFw6Y29tbWVudF1gKTsNCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbW1lbnRzLmxlbmd0aDsgaSsrKSB7DQogICAgICAgIHZhciBwb3B1cCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAnZycpOw0KICAgICAgICB2YXIgcG9wdXBSID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdyZWN0Jyk7DQogICAgICAgIHZhciBob3ZlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAncmVjdCcpOw0KICAgICAgICB2YXIgb2xpbmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ3JlY3QnKTsNCiAgICAgICAgaG92ZXIuc2V0QXR0cmlidXRlKCdmaWxsJywgJyNjZGNkZmYnKTsNCiAgICAgICAgaG92ZXIuc2V0QXR0cmlidXRlKCd4JywgJzAnKTsNCiAgICAgICAgaG92ZXIuc2V0QXR0cmlidXRlKCd5JywgJzAnKTsNCiAgICAgICAgaG92ZXIuc2V0QXR0cmlidXRlKCdoZWlnaHQnLCAnMTYnKTsNCiAgICAgICAgaG92ZXIuc2V0QXR0cmlidXRlKCd3aWR0aCcsICcxNicpOw0KICAgICAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ2ZpbGwtb3BhY2l0eScsICcwLjYnKTsNCiAgICAgICAgaG92ZXIuc2V0QXR0cmlidXRlKCd0cmFuc2Zvcm0nLCBjb21tZW50c1tpXS5xdWVyeVNlbGVjdG9yKCd1c2UnKS5nZXRBdHRyaWJ1dGUoJ3RyYW5zZm9ybScpKTsNCiAgICAgICAgaG92ZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJzsNCiAgICAgICAgY29tbWVudHNbaV0uYXBwZW5kQ2hpbGQoaG92ZXIpOw0KICAgICAgICB2YXIgYSA9IEpTT04ucGFyc2UoY29tbWVudHNbaV0uZ2V0QXR0cmlidXRlKCdlZDpjb21tZW50JykpOw0KICAgICAgICB2YXIgaGVpZ2h0ID0gMDsNCiAgICAgICAgdmFyIGNhcnIgPSBbXTsNCiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBhLmxlbmd0aDsgaisrKSB7DQogICAgICAgICAgICB2YXIgc3RhbXAgPSBOdW1iZXIoYVtqXS5EYXRlKSAqIDEwMDA7DQogICAgICAgICAgICB2YXIgdGltZSA9IHBhcnNlRGF0ZShzdGFtcCk7DQogICAgICAgICAgICB2YXIgbmFtZSA9IGFbal0uTmFtZTsNCiAgICAgICAgICAgIHZhciBtZXNzYWdlID0gYVtqXS5NZXNzYWdlOw0KICAgICAgICAgICAgdmFyIG1lc3NhZ2VBcnIgPSBtZXNzYWdlLnNwbGl0KC9cbi8pOw0KICAgICAgICAgICAgdmFyIG8gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ2cnKTsNCiAgICAgICAgICAgIHZhciBuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICd0ZXh0Jyk7DQogICAgICAgICAgICB2YXIgdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAndGV4dCcpOw0KICAgICAgICAgICAgdmFyIG0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ3RleHQnKTsNCiAgICAgICAgICAgIG4uc2V0QXR0cmlidXRlKCd4JywgNSk7DQogICAgICAgICAgICBuLnNldEF0dHJpYnV0ZSgneScsIDEyKTsNCiAgICAgICAgICAgIG4uc2V0QXR0cmlidXRlKCdmaWxsJywgJyMwMDZlZmYnKTsNCiAgICAgICAgICAgIG4udGV4dENvbnRlbnQgPSBuYW1lICsgJzogJzsNCiAgICAgICAgICAgIG4uc2V0QXR0cmlidXRlKCdmb250LXNpemUnLCAnMTInKTsNCiAgICAgICAgICAgIHQuc2V0QXR0cmlidXRlKCd4JywgMjAwKTsNCiAgICAgICAgICAgIHQuc2V0QXR0cmlidXRlKCd5JywgMTIpOw0KICAgICAgICAgICAgdC5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCAnIzk2OTY5NicpOw0KICAgICAgICAgICAgdC50ZXh0Q29udGVudCA9IHRpbWU7DQogICAgICAgICAgICB0LnNldEF0dHJpYnV0ZSgnZm9udC1zaXplJywgJzEwJyk7DQogICAgICAgICAgICBtLnNldEF0dHJpYnV0ZSgndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgyMCwyNyknKTsNCiAgICAgICAgICAgIG0uc2V0QXR0cmlidXRlKCdmb250LXNpemUnLCAnMTInKTsNCiAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgbWVzc2FnZUFyci5sZW5ndGg7IGsrKykgew0KICAgICAgICAgICAgICAgIHZhciB0cyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAndHNwYW4nKTsNCiAgICAgICAgICAgICAgICB0cy5zZXRBdHRyaWJ1dGUoJ3gnLCAnMCcpOw0KICAgICAgICAgICAgICAgIHRzLnNldEF0dHJpYnV0ZSgneScsIGsgKiAxNik7DQogICAgICAgICAgICAgICAgdHMudGV4dENvbnRlbnQgPSBtZXNzYWdlQXJyW2tdOw0KICAgICAgICAgICAgICAgIG0uYXBwZW5kQ2hpbGQodHMpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgby5zZXRBdHRyaWJ1dGUoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoMCwnICsgaGVpZ2h0ICsgJyknKTsNCiAgICAgICAgICAgIG8uYXBwZW5kQ2hpbGQobik7DQogICAgICAgICAgICBvLmFwcGVuZENoaWxkKHQpOw0KICAgICAgICAgICAgby5hcHBlbmRDaGlsZChtKTsNCiAgICAgICAgICAgIGNhcnIucHVzaChvKTsNCiAgICAgICAgICAgIHBvcHVwLmFwcGVuZENoaWxkKG8pOw0KICAgICAgICAgICAgaGVpZ2h0ID0gKG1lc3NhZ2VBcnIubGVuZ3RoICsgMSkgKiAxNiArIGhlaWdodDsNCiAgICAgICAgfQ0KICAgICAgICB2YXIgd2FyciA9IGdldGN3aChwb3B1cCk7DQogICAgICAgIG9saW5lLnNldEF0dHJpYnV0ZSgneCcsICcwJyk7DQogICAgICAgIG9saW5lLnNldEF0dHJpYnV0ZSgneScsICcwJyk7DQogICAgICAgIHZhciBvdyA9IHdhcnJbMF0gKyAxMC41Ow0KICAgICAgICB2YXIgb2ggPSB3YXJyWzFdICsgMzsNCiAgICAgICAgb2xpbmUuc2V0QXR0cmlidXRlKCd3aWR0aCcsIG93KTsNCiAgICAgICAgb2xpbmUuc2V0QXR0cmlidXRlKCdoZWlnaHQnLCBvaCk7DQogICAgICAgIG9saW5lLnNldEF0dHJpYnV0ZSgnZmlsbCcsICd3aGl0ZScpOw0KICAgICAgICBvbGluZS5zZXRBdHRyaWJ1dGUoJ3N0cm9rZScsICcjNjU2NTY1Jyk7DQogICAgICAgIHBvcHVwLmFwcGVuZENoaWxkKG9saW5lKTsNCiAgICAgICAgdmFyIGwgPSBjYXJyLmxlbmd0aDsNCiAgICAgICAgd2hpbGUgKGwtLSkgew0KICAgICAgICAgICAgcG9wdXAuYXBwZW5kQ2hpbGQoY2FycltsXSk7DQogICAgICAgIH0NCiAgICAgICAgcG9wdXAub25tb3VzZW92ZXIgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB0aGlzLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOw0KICAgICAgICB9Ow0KICAgICAgICBwb3B1cC5vbm1vdXNlb3V0ID0gZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgdGhpcy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOw0KICAgICAgICB9Ow0KICAgICAgICB2YXIgY3MgPSBjb21tZW50c1tpXS5xdWVyeVNlbGVjdG9yKCd1c2UnKS5nZXRBdHRyaWJ1dGUoJ3RyYW5zZm9ybScpLm1hdGNoKC9cKChcUyp8XFMqXHNcUyopXCkvKVsxXS5zcGxpdCgvIHwsLyk7DQogICAgICAgIHZhciBwcyA9IGNvbW1lbnRzW2ldLnBhcmVudE5vZGUuZ2V0QXR0cmlidXRlKCd0cmFuc2Zvcm0nKTsNCiAgICAgICAgaWYgKHBzLnN1YnN0cigwLCAyKSA9PSAndHInKSB7DQogICAgICAgICAgICB2YXIgcHBzID0gcHMubWF0Y2goL1woKFxTKnxcUypcc1xTKilcKS8pWzFdLnNwbGl0KC8gfCwvKTsNCiAgICAgICAgICAgIHZhciB4ID0gcGFyc2VGbG9hdChjc1swXSkgKyBwYXJzZUZsb2F0KHBwc1swXSk7DQogICAgICAgICAgICB2YXIgeSA9IHBhcnNlRmxvYXQocHBzWzFdKTsNCiAgICAgICAgICAgIHggPSB4LnRvc3VpdHN2ZygpOw0KICAgICAgICAgICAgeSA9IHkudG9zdWl0c3ZnKCk7DQogICAgICAgICAgICB2YXIgdHJzdHIgPSAndHJhbnNsYXRlKCcgKyB4ICsgJywnICsgeSArICcpJzsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlIGlmIChwcy5zdWJzdHIoMCwgMikgPT0gJ21hJykgew0KICAgICAgICAgICAgdmFyIHBwcyA9IHBzLm1hdGNoKC8oXC0/XGQrKFwuXGQrKT8pW1wsIF0oXC0/XGQrKFwuXGQrKT8pW1wsIF0oXC0/XGQrKFwuXGQrKT8pW1wsIF0oXC0/XGQrKFwuXGQrKT8pW1wsIF0oXC0/XGQrKFwuXGQrKT8pW1wsIF0oXC0/XGQrKFwuXGQrKT8pXCkkLyk7DQogICAgICAgICAgICB2YXIgbWFBcnIgPSBbcGFyc2VGbG9hdChwcHNbMV0pLCBwYXJzZUZsb2F0KHBwc1szXSksIHBhcnNlRmxvYXQocHBzWzVdKSwgcGFyc2VGbG9hdChwcHNbN10pLCBwYXJzZUZsb2F0KHBwc1s5XSksIHBhcnNlRmxvYXQocHBzWzExXSldOw0KICAgICAgICAgICAgaWYgKG1hQXJyWzFdID09IDApIHsNCiAgICAgICAgICAgICAgICB2YXIgeCA9IHBhcnNlRmxvYXQoY3NbMF0pOw0KICAgICAgICAgICAgICAgIHZhciB5ID0gcGFyc2VGbG9hdChjc1sxXSkgKyAxNjsNCiAgICAgICAgICAgICAgICB2YXIgeDEgPSB4ICogbWFBcnJbMF0gKyB5ICogbWFBcnJbMl0gKyBtYUFycls0XTsNCiAgICAgICAgICAgICAgICB2YXIgeTEgPSB4ICogbWFBcnJbMV0gKyB5ICogbWFBcnJbM10gKyBtYUFycls1XTsNCiAgICAgICAgICAgICAgICB4MSA9IHgxLnRvc3VpdHN2ZygpOw0KICAgICAgICAgICAgICAgIHkxID0geTEudG9zdWl0c3ZnKCk7DQogICAgICAgICAgICAgICAgdmFyIHRyc3RyID0gJ3RyYW5zbGF0ZSgnICsgeDEgKyAnLCcgKyB5MSArICcpJzsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgdmFyIHggPSBwYXJzZUZsb2F0KGNzWzBdKSArIDE2Ow0KICAgICAgICAgICAgICAgIHZhciB5ID0gcGFyc2VGbG9hdChjc1sxXSkgKyAxNjsNCiAgICAgICAgICAgICAgICB2YXIgeDEgPSB4ICogbWFBcnJbMF0gKyB5ICogbWFBcnJbMl0gKyBtYUFycls0XTsNCiAgICAgICAgICAgICAgICB2YXIgeTEgPSB4ICogbWFBcnJbMV0gKyB5ICogbWFBcnJbM10gKyBtYUFycls1XTsNCiAgICAgICAgICAgICAgICB4ID0gcGFyc2VGbG9hdChjc1swXSkgKyAxNjsNCiAgICAgICAgICAgICAgICB5ID0gcGFyc2VGbG9hdChjc1sxXSk7DQogICAgICAgICAgICAgICAgdmFyIHgyID0geCAqIG1hQXJyWzBdICsgeSAqIG1hQXJyWzJdICsgbWFBcnJbNF07DQogICAgICAgICAgICAgICAgdmFyIHkyID0geCAqIG1hQXJyWzFdICsgeSAqIG1hQXJyWzNdICsgbWFBcnJbNV07DQogICAgICAgICAgICAgICAgdmFyIGZ4ID0geDEgPCB4MiA/IHgxLnRvc3VpdHN2ZygpIDogeDIudG9zdWl0c3ZnKCk7DQogICAgICAgICAgICAgICAgdmFyIGZ5ID0geTEgPiB5MiA/IHkxLnRvc3VpdHN2ZygpIDogeTIudG9zdWl0c3ZnKCk7DQogICAgICAgICAgICAgICAgdmFyIG9mZnkgPSBNYXRoLmFicyh5MSAtIHkyKTsNCiAgICAgICAgICAgICAgICB2YXIgdHJzdHIgPSAndHJhbnNsYXRlKCcgKyBmeCArICcsJyArIGZ5ICsgJyknOw0KICAgICAgICAgICAgICAgIHBvcHVwUi5zZXRBdHRyaWJ1dGUoJ2hlaWdodCcsIG9mZnkudG9TdHJpbmcoKSk7DQogICAgICAgICAgICAgICAgcG9wdXBSLnNldEF0dHJpYnV0ZSgnd2lkdGgnLCAnMTYnKTsNCiAgICAgICAgICAgICAgICBwb3B1cFIuc2V0QXR0cmlidXRlKCd5JywgKC1vZmZ5KS50b1N0cmluZygpKTsNCiAgICAgICAgICAgICAgICBwb3B1cFIuc2V0QXR0cmlidXRlKCdmaWxsJywgJ3RyYW5zcGFyZW50Jyk7DQogICAgICAgICAgICAgICAgcG9wdXAuYXBwZW5kQ2hpbGQocG9wdXBSKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICBwb3B1cC5zZXRBdHRyaWJ1dGUoJ3RyYW5zZm9ybScsIHRyc3RyKTsNCiAgICAgICAgcG9wdXAuc2V0QXR0cmlidXRlKCdjb21tZW50JywgJycpOw0KICAgICAgICBwb3B1cC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOw0KICAgICAgICBsZXQgY29tbWVudGlkID0gY29tbWVudHNbaV0ucGFyZW50Tm9kZS5wYXJlbnROb2RlLmlkICsgIiwiICsgY29tbWVudHNbaV0ucGFyZW50Tm9kZS5pZDsNCiAgICAgICAgcG9wdXAuc2V0QXR0cmlidXRlKCdlZDpjb21tZW50aWQnLCBjb21tZW50aWQpOw0KICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjc3ZnLWNvbnRhaW5lciA+IHN2ZzpudGgtY2hpbGQoJyArIGluZGV4ICsgJyknKS5hcHBlbmRDaGlsZChwb3B1cCk7DQogICAgICAgIGNvbW1lbnRzW2ldLm9ubW91c2VvdmVyID0gZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgLy8gdmFyIGNvbW1lbnRpZCA9IHRoaXMucGFyZW50Tm9kZS5pZDsNCiAgICAgICAgICAgIHRoaXMucXVlcnlTZWxlY3RvcigncmVjdCcpLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOw0KICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiZ1tlZFxcOmNvbW1lbnRpZD0nIiArIGNvbW1lbnRpZCArICInXVtjb21tZW50XSIpLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOw0KICAgICAgICB9Ow0KICAgICAgICBjb21tZW50c1tpXS5vbm1vdXNlb3V0ID0gZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgLy8gdmFyIGNvbW1lbnRpZCA9IHRoaXMucGFyZW50Tm9kZS5pZDsNCiAgICAgICAgICAgIC8vICAgICAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKCk7DQogICAgICAgICAgICB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3JlY3QnKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOw0KICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiZ1tlZFxcOmNvbW1lbnRpZD0nIiArIGNvbW1lbnRpZCArICInXVtjb21tZW50XSIpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7DQogICAgICAgIH0NCiAgICB9DQp9DQovLy0tY29tbWVudA0KLy9ub3RlLS0NCmlmICghdWEpIHsNCiAgICBmdW5jdGlvbiBnZXR3aChzLCBwKSB7DQogICAgICAgIHZhciBtYWlucCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOw0KICAgICAgICBtYWlucC5zdHlsZS5jc3NUZXh0ID0gczsNCiAgICAgICAgbWFpbnAuc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUtYmxvY2snOw0KICAgICAgICBtYWlucC5zdHlsZS5tYXhXaWR0aCA9ICc0MDBweCc7DQogICAgICAgIG1haW5wLnN0eWxlLndvcmRCcmVhayA9ICdicmVhay1hbGwnOw0KICAgICAgICBtYWlucC5pbm5lckhUTUwgPSBwOw0KICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG1haW5wKTsNCiAgICAgICAgdmFyIHcgPSBtYWlucC5jbGllbnRXaWR0aDsNCiAgICAgICAgdmFyIGggPSBtYWlucC5jbGllbnRIZWlnaHQ7DQogICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobWFpbnApOw0KICAgICAgICByZXR1cm4gW3csIGhdDQogICAgfQ0KICAgIHN2Z0VsZW1zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgic3ZnIik7DQogICAgZm9yIChsZXQgaW5kZXggPSAxOyBpbmRleCA8PSBzdmdFbGVtcy5sZW5ndGg7IGluZGV4KyspIHsNCiAgICAgICAgdmFyIG5vdGVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnc3ZnOm50aC1jaGlsZCgnICsgaW5kZXggKyAnKSBnPmdbZWRcXDpub3RlXScpOw0KICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vdGVzLmxlbmd0aDsgaSsrKSB7DQogICAgICAgICAgICB2YXIgYSA9IG5vdGVzW2ldLmdldEF0dHJpYnV0ZSgnZWQ6bm90ZScpOw0KICAgICAgICAgICAgdmFyIG5vdGVMb2NrID0gbm90ZXNbaV0uZ2V0QXR0cmlidXRlKCdlZDpub3RlbG9jaycpOw0KICAgICAgICAgICAgaWYgKG5vdGVMb2NrID09ICd0cnVlJykgew0KICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgdmFyIG1haW5wID0gYS5tYXRjaCgvPGJvZHlbXj5dKj4oLiopPFwvYm9keT4vKVsxXTsNCiAgICAgICAgICAgIHZhciBtYWlucyA9IGEubWF0Y2goL3N0eWxlPSIoLio/KSIvKVsxXTsNCiAgICAgICAgICAgIHZhciBvdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ2cnKTsNCiAgICAgICAgICAgIHZhciBvbGluZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAncmVjdCcpOw0KICAgICAgICAgICAgdmFyIHBvcHVwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdmb3JlaWduT2JqZWN0Jyk7DQogICAgICAgICAgICB2YXIgcG9wdXBSID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdyZWN0Jyk7DQogICAgICAgICAgICB2YXIgaG92ZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ3JlY3QnKTsNCiAgICAgICAgICAgIGhvdmVyLnNldEF0dHJpYnV0ZSgnZmlsbCcsICcjY2RjZGZmJyk7DQogICAgICAgICAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ3gnLCAnMCcpOw0KICAgICAgICAgICAgaG92ZXIuc2V0QXR0cmlidXRlKCd5JywgJzAnKTsNCiAgICAgICAgICAgIGhvdmVyLnNldEF0dHJpYnV0ZSgnaGVpZ2h0JywgJzE2Jyk7DQogICAgICAgICAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ3dpZHRoJywgJzE2Jyk7DQogICAgICAgICAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ2ZpbGwtb3BhY2l0eScsICcwLjYnKTsNCiAgICAgICAgICAgIGhvdmVyLnNldEF0dHJpYnV0ZSgndHJhbnNmb3JtJywgbm90ZXNbaV0ucXVlcnlTZWxlY3RvcigndXNlJykuZ2V0QXR0cmlidXRlKCd0cmFuc2Zvcm0nKSk7DQogICAgICAgICAgICBob3Zlci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOw0KICAgICAgICAgICAgbm90ZXNbaV0uYXBwZW5kQ2hpbGQoaG92ZXIpOw0KICAgICAgICAgICAgcG9wdXAuc3R5bGUuY3NzVGV4dCA9IG1haW5zOw0KICAgICAgICAgICAgcG9wdXAuaW5uZXJIVE1MID0gbWFpbnA7DQogICAgICAgICAgICB2YXIgd2ggPSBnZXR3aChtYWlucywgbWFpbnApOw0KICAgICAgICAgICAgcG9wdXAuc2V0QXR0cmlidXRlKCd3aWR0aCcsIHdoWzBdKTsNCiAgICAgICAgICAgIHBvcHVwLnNldEF0dHJpYnV0ZSgnaGVpZ2h0Jywgd2hbMV0pOw0KICAgICAgICAgICAgcG9wdXAuc2V0QXR0cmlidXRlKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKDgsNCknKTsNCiAgICAgICAgICAgIHBvcHVwLnN0eWxlLndvcmRCcmVhayA9ICdicmVhay1hbGwnOw0KICAgICAgICAgICAgcG9wdXAuc3R5bGUudGV4dEFsaWduID0gJ2xlZnQnOw0KICAgICAgICAgICAgb2xpbmUuc2V0QXR0cmlidXRlKCd4JywgJzAnKTsNCiAgICAgICAgICAgIG9saW5lLnNldEF0dHJpYnV0ZSgneScsICcwJyk7DQogICAgICAgICAgICBvbGluZS5zZXRBdHRyaWJ1dGUoJ3dpZHRoJywgd2hbMF0gKyAxNik7DQogICAgICAgICAgICBvbGluZS5zZXRBdHRyaWJ1dGUoJ2hlaWdodCcsIHdoWzFdICsgOCk7DQogICAgICAgICAgICBvbGluZS5zZXRBdHRyaWJ1dGUoJ3N0cm9rZScsICcjYTI3YTAwJyk7DQogICAgICAgICAgICBvbGluZS5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCAnI2ZmZTc5ZCcpOw0KICAgICAgICAgICAgb3V0LmFwcGVuZENoaWxkKG9saW5lKTsNCiAgICAgICAgICAgIG91dC5hcHBlbmRDaGlsZChwb3B1cCk7DQogICAgICAgICAgICBvdXQuc2V0QXR0cmlidXRlKCdub3RlJywgJycpOw0KICAgICAgICAgICAgb3V0LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7DQogICAgICAgICAgICBsZXQgbm90ZWlkID0gbm90ZXNbaV0ucGFyZW50Tm9kZS5wYXJlbnROb2RlLmlkICsgIiwiICsgbm90ZXNbaV0ucGFyZW50Tm9kZS5pZDsNCiAgICAgICAgICAgIG91dC5zZXRBdHRyaWJ1dGUoJ2VkOm5vdGVpZCcsIG5vdGVpZCk7DQogICAgICAgICAgICBvdXQub25tb3VzZW92ZXIgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgdGhpcy5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsNCiAgICAgICAgICAgIH07DQogICAgICAgICAgICBvdXQub25tb3VzZW91dCA9IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAvLyAgICAgICAgd2luZG93LmdldFNlbGVjdGlvbiA/IHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5yZW1vdmVSYW5nZSh3aW5kb3cuZ2V0U2VsZWN0aW9uKCkucmUpOmRvY3VtZW50LnNlbGVjdGlvbi5lbXB0eSgpOw0KDQogICAgICAgICAgICAgICAgdGhpcy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOw0KICAgICAgICAgICAgfTsNCiAgICAgICAgICAgIHZhciBjcyA9IG5vdGVzW2ldLnF1ZXJ5U2VsZWN0b3IoJ3VzZScpLmdldEF0dHJpYnV0ZSgndHJhbnNmb3JtJykubWF0Y2goL1woKFxTKnxcUypcc1xTKilcKS8pWzFdLnNwbGl0KC8gfCwvKTsNCiAgICAgICAgICAgIHZhciBwcyA9IG5vdGVzW2ldLnBhcmVudE5vZGUuZ2V0QXR0cmlidXRlKCd0cmFuc2Zvcm0nKTsNCiAgICAgICAgICAgIGlmIChwcy5zdWJzdHIoMCwgMikgPT0gJ3RyJykgew0KICAgICAgICAgICAgICAgIHZhciBwcHMgPSBwcy5tYXRjaCgvXCgoXFMqfFxTKlxzXFMqKVwpLylbMV0uc3BsaXQoLyB8LC8pOw0KICAgICAgICAgICAgICAgIHZhciB4ID0gcGFyc2VGbG9hdChjc1swXSkgKyBwYXJzZUZsb2F0KHBwc1swXSk7DQogICAgICAgICAgICAgICAgdmFyIHkgPSBwYXJzZUZsb2F0KHBwc1sxXSk7DQogICAgICAgICAgICAgICAgeCA9IHgudG9zdWl0c3ZnKCk7DQogICAgICAgICAgICAgICAgeSA9IHkudG9zdWl0c3ZnKCk7DQogICAgICAgICAgICAgICAgdmFyIHRyc3RyID0gJ3RyYW5zbGF0ZSgnICsgeCArICcsJyArIHkgKyAnKSc7DQogICAgICAgICAgICB9IGVsc2UgaWYgKHBzLnN1YnN0cigwLCAyKSA9PSAnbWEnKSB7DQogICAgICAgICAgICAgICAgdmFyIHBwcyA9IHBzLm1hdGNoKC8oXC0/XGQrKFwuXGQrKT8pW1wsIF0oXC0/XGQrKFwuXGQrKT8pW1wsIF0oXC0/XGQrKFwuXGQrKT8pW1wsIF0oXC0/XGQrKFwuXGQrKT8pW1wsIF0oXC0/XGQrKFwuXGQrKT8pW1wsIF0oXC0/XGQrKFwuXGQrKT8pXCkkLyk7DQogICAgICAgICAgICAgICAgdmFyIG1hQXJyID0gW3BhcnNlRmxvYXQocHBzWzFdKSwgcGFyc2VGbG9hdChwcHNbM10pLCBwYXJzZUZsb2F0KHBwc1s1XSksIHBhcnNlRmxvYXQocHBzWzddKSwgcGFyc2VGbG9hdChwcHNbOV0pLCBwYXJzZUZsb2F0KHBwc1sxMV0pXTsNCiAgICAgICAgICAgICAgICBpZiAobWFBcnJbMV0gPT0gMCkgew0KICAgICAgICAgICAgICAgICAgICB2YXIgeCA9IHBhcnNlRmxvYXQoY3NbMF0pOw0KICAgICAgICAgICAgICAgICAgICB2YXIgeSA9IHBhcnNlRmxvYXQoY3NbMV0pICsgMTY7DQogICAgICAgICAgICAgICAgICAgIHZhciB4MSA9IHggKiBtYUFyclswXSArIHkgKiBtYUFyclsyXSArIG1hQXJyWzRdOw0KICAgICAgICAgICAgICAgICAgICB2YXIgeTEgPSB4ICogbWFBcnJbMV0gKyB5ICogbWFBcnJbM10gKyBtYUFycls1XTsNCiAgICAgICAgICAgICAgICAgICAgeDEgPSB4MS50b3N1aXRzdmcoKTsNCiAgICAgICAgICAgICAgICAgICAgeTEgPSB5MS50b3N1aXRzdmcoKTsNCiAgICAgICAgICAgICAgICAgICAgdmFyIHRyc3RyID0gJ3RyYW5zbGF0ZSgnICsgeDEgKyAnLCcgKyB5MSArICcpJzsNCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICB2YXIgeCA9IHBhcnNlRmxvYXQoY3NbMF0pICsgMTY7DQogICAgICAgICAgICAgICAgICAgIHZhciB5ID0gcGFyc2VGbG9hdChjc1sxXSkgKyAxNjsNCiAgICAgICAgICAgICAgICAgICAgdmFyIHgxID0geCAqIG1hQXJyWzBdICsgeSAqIG1hQXJyWzJdICsgbWFBcnJbNF07DQogICAgICAgICAgICAgICAgICAgIHZhciB5MSA9IHggKiBtYUFyclsxXSArIHkgKiBtYUFyclszXSArIG1hQXJyWzVdOw0KICAgICAgICAgICAgICAgICAgICB4ID0gcGFyc2VGbG9hdChjc1swXSkgKyAxNjsNCiAgICAgICAgICAgICAgICAgICAgeSA9IHBhcnNlRmxvYXQoY3NbMV0pOw0KICAgICAgICAgICAgICAgICAgICB2YXIgeDIgPSB4ICogbWFBcnJbMF0gKyB5ICogbWFBcnJbMl0gKyBtYUFycls0XTsNCiAgICAgICAgICAgICAgICAgICAgdmFyIHkyID0geCAqIG1hQXJyWzFdICsgeSAqIG1hQXJyWzNdICsgbWFBcnJbNV07DQogICAgICAgICAgICAgICAgICAgIHZhciBmeCA9IHgxIDwgeDIgPyB4MS50b3N1aXRzdmcoKSA6IHgyLnRvc3VpdHN2ZygpOw0KICAgICAgICAgICAgICAgICAgICB2YXIgZnkgPSB5MSA+IHkyID8geTEudG9zdWl0c3ZnKCkgOiB5Mi50b3N1aXRzdmcoKTsNCiAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnkgPSBNYXRoLmFicyh5MSAtIHkyKTsNCiAgICAgICAgICAgICAgICAgICAgdmFyIHRyc3RyID0gJ3RyYW5zbGF0ZSgnICsgZnggKyAnLCcgKyBmeSArICcpJzsNCiAgICAgICAgICAgICAgICAgICAgcG9wdXBSLnNldEF0dHJpYnV0ZSgnaGVpZ2h0Jywgb2ZmeS50b1N0cmluZygpKTsNCiAgICAgICAgICAgICAgICAgICAgcG9wdXBSLnNldEF0dHJpYnV0ZSgnd2lkdGgnLCAnMTYnKTsNCiAgICAgICAgICAgICAgICAgICAgcG9wdXBSLnNldEF0dHJpYnV0ZSgneScsICgtb2ZmeSkudG9TdHJpbmcoKSk7DQogICAgICAgICAgICAgICAgICAgIHBvcHVwUi5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCAndHJhbnNwYXJlbnQnKTsNCiAgICAgICAgICAgICAgICAgICAgcG9wdXAuYXBwZW5kQ2hpbGQocG9wdXBSKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICBvdXQuc2V0QXR0cmlidXRlKCd0cmFuc2Zvcm0nLCB0cnN0cik7DQogICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjc3ZnLWNvbnRhaW5lciA+IHN2ZzpudGgtY2hpbGQoJyArIGluZGV4ICsgJyknKS5hcHBlbmRDaGlsZChvdXQpOw0KICAgICAgICAgICAgbm90ZXNbaV0ub25tb3VzZW92ZXIgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgLy8gdmFyIG5vdGVpZCA9IG5vdGVpZDsNCiAgICAgICAgICAgICAgICB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3JlY3QnKS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsNCiAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJnW2VkXFw6bm90ZWlkPSciICsgbm90ZWlkICsgIiddW25vdGVdIikuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7DQogICAgICAgICAgICB9Ow0KICAgICAgICAgICAgbm90ZXNbaV0ub25tb3VzZW91dCA9IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAvLyB2YXIgbm90ZWlkID0gbm90ZWlkOw0KICAgICAgICAgICAgICAgIC8vICAgICAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKCk7DQogICAgICAgICAgICAgICAgdGhpcy5xdWVyeVNlbGVjdG9yKCdyZWN0Jykuc3R5bGUuZGlzcGxheSA9ICdub25lJzsNCiAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJnW2VkXFw6bm90ZWlkPSciICsgbm90ZWlkICsgIiddW25vdGVdIikuc3R5bGUuZGlzcGxheSA9ICdub25lJzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCn0gZWxzZSB7DQogICAgY29uc29sZS5sb2coJ+aKseatie+8jElF5rWP6KeI5Zmo5LiN5pSv5oyBbm90Zeino+aekO+8jOivt+S9v+eUqOWFtuS7luWGheaguOa1j+iniOWZqOOAguiwouiwou+8gScpDQp9DQovLy0tbm90ZQ0KLy9oeXBlcmxpbmstLQ0KZnVuY3Rpb24gZ2V0bWF4bGVuKGFyciwgYnJyKSB7DQogICAgdmFyIGwgPSAwOw0KICAgIHZhciBsbCA9IDA7DQogICAgZm9yICh2YXIgaiA9IDA7IGogPCBhcnIubGVuZ3RoOyBqKyspIHsNCiAgICAgICAgdmFyIGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ3RleHQnKTsNCiAgICAgICAgaWYgKCFpc05hTihsaW5rYXJyW2pdKSkgew0KICAgICAgICAgICAgZS50ZXh0Q29udGVudCA9ICdQYWdlLScgKyBhcnJbal07DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICBlLnRleHRDb250ZW50ID0gYXJyW2pdOw0KICAgICAgICB9DQogICAgICAgIGUuc3R5bGUuZm9udFNpemUgPSAnMTJweCc7DQogICAgICAgIGRvY3VtZW50LmJvZHkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3N2ZycpWzBdLmFwcGVuZENoaWxkKGUpOw0KICAgICAgICB2YXIgZXcgPSBlLmdldEJCb3goKS53aWR0aDsNCiAgICAgICAgZG9jdW1lbnQuYm9keS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc3ZnJylbMF0ucmVtb3ZlQ2hpbGQoZSk7DQogICAgICAgIHZhciBoID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICd0ZXh0Jyk7DQogICAgICAgIGgudGV4dENvbnRlbnQgPSBicnJbal07DQogICAgICAgIGguc3R5bGUuZm9udFNpemUgPSAnMTJweCc7DQogICAgICAgIGguc3R5bGUuZm9udFdlaWdodCA9ICdib2xkJzsNCiAgICAgICAgZG9jdW1lbnQuYm9keS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc3ZnJylbMF0uYXBwZW5kQ2hpbGQoaCk7DQogICAgICAgIHZhciBodyA9IGguZ2V0QkJveCgpLndpZHRoOw0KICAgICAgICBkb2N1bWVudC5ib2R5LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzdmcnKVswXS5yZW1vdmVDaGlsZChoKTsNCiAgICAgICAgbCA9IGV3ID4gaHcgPyBldyA6IGh3Ow0KICAgICAgICBsbCA9IGwgPiBsbCA/IGwgOiBsbDsNCiAgICB9DQogICAgcmV0dXJuIGxsOw0KfQ0Kc3ZnRWxlbXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJzdmciKTsNCmZvciAobGV0IGluZGV4ID0gMTsgaW5kZXggPD0gc3ZnRWxlbXMubGVuZ3RoOyBpbmRleCsrKSB7DQogICAgbGV0IHN2Z0VsZW0gPSBzdmdFbGVtc1tpbmRleF07DQogICAgbGV0IGxpbmtzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgic3ZnOm50aC1jaGlsZCgiICsgaW5kZXggKyAiKSBnPmdbZWRcXDpoeXBlcmxpbmtdIikNCiAgICBjb25zb2xlLmxvZyhsaW5rcyk7DQogICAgLy8gdmFyIGxpbmtzPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2c+Z1tlZFxcOmh5cGVybGlua10nKTsNCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmtzLmxlbmd0aDsgaSsrKSB7DQogICAgICAgIHZhciBwb3B1cCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAnZycpOw0KICAgICAgICB2YXIgcG9wdXBSID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdyZWN0Jyk7DQogICAgICAgIHZhciBob3ZlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAncmVjdCcpOw0KICAgICAgICB2YXIgZGVzY2FyciA9IFtdOw0KICAgICAgICB2YXIgbGlua2FyciA9IFtdOw0KICAgICAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCAnI2NkY2RmZicpOw0KICAgICAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ3gnLCAnMCcpOw0KICAgICAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ3knLCAnMCcpOw0KICAgICAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ2hlaWdodCcsICcxNicpOw0KICAgICAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ3dpZHRoJywgJzE2Jyk7DQogICAgICAgIGhvdmVyLnNldEF0dHJpYnV0ZSgnZmlsbC1vcGFjaXR5JywgJzAuNicpOw0KICAgICAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ3RyYW5zZm9ybScsIGxpbmtzW2ldLnF1ZXJ5U2VsZWN0b3IoJ3VzZScpLmdldEF0dHJpYnV0ZSgndHJhbnNmb3JtJykpOw0KICAgICAgICBob3Zlci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOw0KICAgICAgICBsaW5rc1tpXS5hcHBlbmRDaGlsZChob3Zlcik7DQogICAgICAgIC8vIGNvbnNvbGUubG9nKGxpbmtzW2ldLmdldEF0dHJpYnV0ZSgnZWQ6aHlwZXJsaW5rJykpOw0KICAgICAgICB2YXIgYSA9IEpTT04ucGFyc2UobGlua3NbaV0uZ2V0QXR0cmlidXRlKCdlZDpoeXBlcmxpbmsnKSk7DQogICAgICAgIHZhciBjcyA9IGxpbmtzW2ldLnF1ZXJ5U2VsZWN0b3IoJ3VzZScpLmdldEF0dHJpYnV0ZSgndHJhbnNmb3JtJykubWF0Y2goL1woKFxTKnxcUypcc1xTKilcKS8pWzFdLnNwbGl0KC8gfCwvKTsNCiAgICAgICAgdmFyIHBzID0gbGlua3NbaV0ucGFyZW50Tm9kZS5nZXRBdHRyaWJ1dGUoJ3RyYW5zZm9ybScpOw0KICAgICAgICBpZiAocHMuc3Vic3RyKDAsIDIpID09ICd0cicpIHsNCiAgICAgICAgICAgIHZhciBwcHMgPSBwcy5tYXRjaCgvXCgoXFMqfFxTKlxzXFMqKVwpLylbMV0uc3BsaXQoLyB8LC8pOw0KICAgICAgICAgICAgdmFyIHggPSBwYXJzZUZsb2F0KGNzWzBdKSArIHBhcnNlRmxvYXQocHBzWzBdKTsNCiAgICAgICAgICAgIHZhciB5ID0gcGFyc2VGbG9hdChwcHNbMV0pOw0KICAgICAgICAgICAgeCA9IHgudG9zdWl0c3ZnKCk7DQogICAgICAgICAgICB5ID0geS50b3N1aXRzdmcoKTsNCiAgICAgICAgICAgIHZhciB0cnN0ciA9ICd0cmFuc2xhdGUoJyArIHggKyAnLCcgKyB5ICsgJyknOw0KICAgICAgICB9IGVsc2UgaWYgKHBzLnN1YnN0cigwLCAyKSA9PSAnbWEnKSB7DQogICAgICAgICAgICB2YXIgcHBzID0gcHMubWF0Y2goLyhcLT9cZCsoXC5cZCspPylbXCwgXShcLT9cZCsoXC5cZCspPylbXCwgXShcLT9cZCsoXC5cZCspPylbXCwgXShcLT9cZCsoXC5cZCspPylbXCwgXShcLT9cZCsoXC5cZCspPylbXCwgXShcLT9cZCsoXC5cZCspPylcKSQvKTsNCiAgICAgICAgICAgIHZhciBtYUFyciA9IFtwYXJzZUZsb2F0KHBwc1sxXSksIHBhcnNlRmxvYXQocHBzWzNdKSwgcGFyc2VGbG9hdChwcHNbNV0pLCBwYXJzZUZsb2F0KHBwc1s3XSksIHBhcnNlRmxvYXQocHBzWzldKSwgcGFyc2VGbG9hdChwcHNbMTFdKV07DQogICAgICAgICAgICBpZiAobWFBcnJbMV0gPT0gMCkgew0KICAgICAgICAgICAgICAgIHZhciB4ID0gcGFyc2VGbG9hdChjc1swXSk7DQogICAgICAgICAgICAgICAgdmFyIHkgPSBwYXJzZUZsb2F0KGNzWzFdKSArIDE2Ow0KICAgICAgICAgICAgICAgIHZhciB4MSA9IHggKiBtYUFyclswXSArIHkgKiBtYUFyclsyXSArIG1hQXJyWzRdOw0KICAgICAgICAgICAgICAgIHZhciB5MSA9IHggKiBtYUFyclsxXSArIHkgKiBtYUFyclszXSArIG1hQXJyWzVdOw0KICAgICAgICAgICAgICAgIHgxID0geDEudG9zdWl0c3ZnKCk7DQogICAgICAgICAgICAgICAgeTEgPSB5MS50b3N1aXRzdmcoKTsNCiAgICAgICAgICAgICAgICB2YXIgdHJzdHIgPSAndHJhbnNsYXRlKCcgKyB4MSArICcsJyArIHkxICsgJyknOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICB2YXIgeCA9IHBhcnNlRmxvYXQoY3NbMF0pICsgMTY7DQogICAgICAgICAgICAgICAgdmFyIHkgPSBwYXJzZUZsb2F0KGNzWzFdKSArIDE2Ow0KICAgICAgICAgICAgICAgIHZhciB4MSA9IHggKiBtYUFyclswXSArIHkgKiBtYUFyclsyXSArIG1hQXJyWzRdOw0KICAgICAgICAgICAgICAgIHZhciB5MSA9IHggKiBtYUFyclsxXSArIHkgKiBtYUFyclszXSArIG1hQXJyWzVdOw0KICAgICAgICAgICAgICAgIHggPSBwYXJzZUZsb2F0KGNzWzBdKSArIDE2Ow0KICAgICAgICAgICAgICAgIHkgPSBwYXJzZUZsb2F0KGNzWzFdKTsNCiAgICAgICAgICAgICAgICB2YXIgeDIgPSB4ICogbWFBcnJbMF0gKyB5ICogbWFBcnJbMl0gKyBtYUFycls0XTsNCiAgICAgICAgICAgICAgICB2YXIgeTIgPSB4ICogbWFBcnJbMV0gKyB5ICogbWFBcnJbM10gKyBtYUFycls1XTsNCiAgICAgICAgICAgICAgICB2YXIgZnggPSB4MSA8IHgyID8geDEudG9zdWl0c3ZnKCkgOiB4Mi50b3N1aXRzdmcoKTsNCiAgICAgICAgICAgICAgICB2YXIgZnkgPSB5MSA+IHkyID8geTEudG9zdWl0c3ZnKCkgOiB5Mi50b3N1aXRzdmcoKTsNCiAgICAgICAgICAgICAgICB2YXIgb2ZmeSA9IE1hdGguYWJzKHkxIC0geTIpOw0KICAgICAgICAgICAgICAgIHZhciB0cnN0ciA9ICd0cmFuc2xhdGUoJyArIGZ4ICsgJywnICsgZnkgKyAnKSc7DQogICAgICAgICAgICAgICAgcG9wdXBSLnNldEF0dHJpYnV0ZSgnaGVpZ2h0Jywgb2ZmeS50b1N0cmluZygpKTsNCiAgICAgICAgICAgICAgICBwb3B1cFIuc2V0QXR0cmlidXRlKCd3aWR0aCcsICcxNicpOw0KICAgICAgICAgICAgICAgIHBvcHVwUi5zZXRBdHRyaWJ1dGUoJ3knLCAoLW9mZnkpLnRvU3RyaW5nKCkpOw0KICAgICAgICAgICAgICAgIHBvcHVwUi5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCAndHJhbnNwYXJlbnQnKTsNCiAgICAgICAgICAgICAgICBwb3B1cC5hcHBlbmRDaGlsZChwb3B1cFIpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIHZhciBhbCA9IGEubGVuZ3RoOw0KICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGFsOyBqKyspIHsNCiAgICAgICAgICAgIGxpbmthcnIucHVzaChhW2pdLmxpbmspOw0KICAgICAgICAgICAgZGVzY2Fyci5wdXNoKGFbal0uZGVzYyk7DQogICAgICAgIH0NCiAgICAgICAgcG9wdXAuc2V0QXR0cmlidXRlKCd0cmFuc2Zvcm0nLCB0cnN0cik7DQogICAgICAgIHZhciBtYXggPSBnZXRtYXhsZW4obGlua2FyciwgZGVzY2Fycik7DQogICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgYWw7IGsrKykgew0KICAgICAgICAgICAgdmFyIGMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ2EnKTsNCiAgICAgICAgICAgIHZhciBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdyZWN0Jyk7DQogICAgICAgICAgICB2YXIgZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAndGV4dCcpOw0KICAgICAgICAgICAgdmFyIGYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ3RleHQnKTsNCiAgICAgICAgICAgIGlmIChpc05hTihsaW5rYXJyW2tdKSkgew0KICAgICAgICAgICAgICAgIGMuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwgInhsaW5rIiwgImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiKTsNCiAgICAgICAgICAgICAgICBjLnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiwgImhyZWYiLCBsaW5rYXJyW2tdKTsNCiAgICAgICAgICAgICAgICBjLnNldEF0dHJpYnV0ZSgndGFyZ2V0JywgJ19ibGFuaycpOw0KICAgICAgICAgICAgICAgIGUudGV4dENvbnRlbnQgPSBsaW5rYXJyW2tdOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICBlLnRleHRDb250ZW50ID0gJ1BhZ2UtJyArIGxpbmthcnJba107DQogICAgICAgICAgICAgICAgYy5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCAieGxpbmsiLCAiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIpOw0KICAgICAgICAgICAgICAgIGMuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLCAiaHJlZiIsICIjIiArIGxpbmthcnJba10pOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZC5zZXRBdHRyaWJ1dGUoJ3dpZHRoJywgbWF4ICsgMTApOw0KICAgICAgICAgICAgZC5zZXRBdHRyaWJ1dGUoJ2hlaWdodCcsICczMycpOw0KICAgICAgICAgICAgZC5zZXRBdHRyaWJ1dGUoJ3N0cm9rZScsICcjOTk5OTk5Jyk7DQogICAgICAgICAgICBkLnNldEF0dHJpYnV0ZSgnZmlsbCcsICd3aGl0ZScpOw0KICAgICAgICAgICAgZC5zZXRBdHRyaWJ1dGUoJ3knLCAzMyAqIGspOw0KICAgICAgICAgICAgZi50ZXh0Q29udGVudCA9IGRlc2NhcnJba107DQogICAgICAgICAgICBmLnN0eWxlLmZvbnRTaXplID0gJzEycHgnOw0KICAgICAgICAgICAgZi5zdHlsZS5mb250V2VpZ2h0ID0gJ2JvbGQnOw0KICAgICAgICAgICAgZi5zZXRBdHRyaWJ1dGUoJ3gnLCA1KTsNCiAgICAgICAgICAgIGYuc2V0QXR0cmlidXRlKCd5JywgMzMgKiBrICsgMTIpOw0KICAgICAgICAgICAgZS5zdHlsZS5mb250U2l6ZSA9ICcxMnB4JzsNCiAgICAgICAgICAgIGUuc2V0QXR0cmlidXRlKCd5JywgMzMgKiBrICsgMjgpOw0KICAgICAgICAgICAgZS5zZXRBdHRyaWJ1dGUoJ3gnLCA1KTsNCiAgICAgICAgICAgIGMuYXBwZW5kQ2hpbGQoZCk7DQogICAgICAgICAgICBjLmFwcGVuZENoaWxkKGYpOw0KICAgICAgICAgICAgYy5hcHBlbmRDaGlsZChlKTsNCiAgICAgICAgICAgIGMub25tb3VzZW92ZXIgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgdGhpcy5xdWVyeVNlbGVjdG9yKCdyZWN0Jykuc3R5bGUuZmlsbCA9ICcjZTFlMWZmJw0KICAgICAgICAgICAgfTsNCiAgICAgICAgICAgIGMub25tb3VzZW91dCA9IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3JlY3QnKS5zdHlsZS5maWxsID0gJ3doaXRlJw0KICAgICAgICAgICAgfTsNCiAgICAgICAgICAgIHBvcHVwLmFwcGVuZENoaWxkKGMpOw0KICAgICAgICB9DQogICAgICAgIHBvcHVwLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7DQogICAgICAgIHBvcHVwLnNldEF0dHJpYnV0ZSgnaHlwZXJsaW5rJywgJycpOw0KICAgICAgICBwb3B1cC5zZXRBdHRyaWJ1dGUoJ2VkOmxpbmtpZCcsIGxpbmtzW2ldLnBhcmVudE5vZGUucGFyZW50Tm9kZS5pZCArICIsIiArIGxpbmtzW2ldLnBhcmVudE5vZGUuaWQpOw0KICAgICAgICBwb3B1cC5vbm1vdXNlb3ZlciA9IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIHRoaXMuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7DQogICAgICAgIH07DQogICAgICAgIHBvcHVwLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB0aGlzLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7DQogICAgICAgIH07DQogICAgICAgIHBvcHVwLm9ubW91c2VvdXQgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB0aGlzLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7DQogICAgICAgIH07DQogICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNzdmctY29udGFpbmVyID4gc3ZnOm50aC1jaGlsZCgnICsgaW5kZXggKyAnKScpLmFwcGVuZENoaWxkKHBvcHVwKTsNCiAgICAgICAgbGlua3NbaV0ub25tb3VzZW92ZXIgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB2YXIgbGlua2lkID0gdGhpcy5wYXJlbnROb2RlLnBhcmVudE5vZGUuaWQgKyAiLCIgKyB0aGlzLnBhcmVudE5vZGUuaWQ7DQogICAgICAgICAgICB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3JlY3QnKS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsNCiAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImdbZWRcXDpsaW5raWQ9JyIgKyBsaW5raWQgKyAiJ11baHlwZXJsaW5rXSIpLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOw0KICAgICAgICAgICAgLy8gcG9wdXAuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7DQogICAgICAgIH0NCiAgICAgICAgbGlua3NbaV0ub25tb3VzZW91dCA9IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIC8vIHZhciBsaW5raWQgPSB0aGlzLnBhcmVudE5vZGUuaWQ7DQogICAgICAgICAgICB2YXIgbGlua2lkID0gdGhpcy5wYXJlbnROb2RlLnBhcmVudE5vZGUuaWQgKyAiLCIgKyB0aGlzLnBhcmVudE5vZGUuaWQ7DQogICAgICAgICAgICB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3JlY3QnKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOw0KICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiZ1tlZFxcOmxpbmtpZD0nIiArIGxpbmtpZCArICInXVtoeXBlcmxpbmtdIikuc3R5bGUuZGlzcGxheSA9ICdub25lJzsNCiAgICAgICAgICAgIC8vIHBvcHVwLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7DQogICAgICAgIH0NCiAgICB9DQp9DQoNCi8vLS1oeXBlcmxpbmsNCi8vaW5pdGlhbGl6ZS0tDQp2YXIgc2hhcGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdnW2VkXFw6dG9ndG9waWNpZF0nKTsNCnZhciBtSWQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdnW2VkXFw6dG9waWN0eXBlXScpOw0KdmFyIGRhdGFUcmVlID0ge307DQp2YXIgZXh0cmFSZWxhID0ge307DQp2YXIgY2hlY2tJRCA9ICcnOw0KZm9yICh2YXIgaSA9IDA7IGkgPCBtSWQubGVuZ3RoOyBpKyspIHsNCiAgICB2YXIgdHlwZSA9IG1JZFtpXS5nZXRBdHRyaWJ1dGUoJ2VkOnRvcGljdHlwZScpOw0KICAgIHZhciBzaWQgPSBtSWRbaV0uaWQ7DQogICAgaWYgKHR5cGUgIT09ICdjYWxsb3V0Jykgew0KICAgICAgICBpbml0KHNpZCwgZGF0YVRyZWUpDQogICAgfQ0KfQ0KZnVuY3Rpb24gaW5pdChpZCwgb2JqKSB7DQogICAgdmFyIGNoaWxkcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoImdbZWRcXDpwYXJlbnRpZD0nIiArIGlkICsgIiddOm5vdChbZWRcXDp0b3BpY3R5cGVdKSIpOw0KICAgIHZhciBjYWxscyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoImdbZWRcXDpwYXJlbnRpZD0nIiArIGlkICsgIiddW2VkXFw6dG9waWN0eXBlXSIpOw0KICAgIHZhciBzdW1tYXJ5ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgicGF0aFtlZFxcOnBhcmVudGlkKj0nIiArIGlkICsgIiddW2VkXFw6dHlwZT0nc3VtbWFyeSddIik7DQogICAgdmFyIGJvdW5kYXJ5ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgicGF0aFtlZFxcOnBhcmVudGlkKj0nIiArIGlkICsgIiddW2VkXFw6dHlwZT0nYm91bmRhcnknXSIpOw0KICAgIHZhciByZWxhZnJvbSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoImdbZWRcXDpmcm9taWQqPSciICsgaWQgKyAiJ11bZWRcXDp0eXBlPSdyZWxhdGlvbiddIik7DQogICAgdmFyIHJlbGF0byA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoImdbZWRcXDp0b2lkKj0nIiArIGlkICsgIiddW2VkXFw6dHlwZT0ncmVsYXRpb24nXSIpOw0KICAgIG9ialsibSIgKyBpZF0gPSB7fTsNCiAgICB2YXIgdHlwZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5nZXRBdHRyaWJ1dGUoJ2VkOnRvcGljdHlwZScpOw0KICAgIHZhciBpdyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5nZXRBdHRyaWJ1dGUoJ2VkOndpZHRoJyk7DQogICAgdmFyIGloID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLmdldEF0dHJpYnV0ZSgnZWQ6aGVpZ2h0Jyk7DQogICAgaWYgKHR5cGUpIHsNCiAgICAgICAgb2JqWyJtIiArIGlkXS50eXBlID0gdHlwZTsNCiAgICB9DQogICAgaWYgKGl3ICYmIGloKSB7DQogICAgICAgIG9ialsibSIgKyBpZF0ud2lkdGggPSBpdzsNCiAgICAgICAgb2JqWyJtIiArIGlkXS5oZWlnaHQgPSBpaDsNCiAgICB9DQogICAgaWYgKHJlbGFmcm9tLmxlbmd0aCAhPT0gMCkgew0KICAgICAgICBvYmpbIm0iICsgaWRdLnJlbGFmcm9tID0ge307DQogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVsYWZyb20ubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICAgIHZhciBpbmRleGlkID0gcmVsYWZyb21baV0uaWQ7DQogICAgICAgICAgICB2YXIgdG9pZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGluZGV4aWQpLmdldEF0dHJpYnV0ZSgnZWQ6dG9pZCcpOw0KICAgICAgICAgICAgaWYgKGV4dHJhUmVsYVtpbmRleGlkXSA9PT0gdW5kZWZpbmVkKSB7DQogICAgICAgICAgICAgICAgZXh0cmFSZWxhW2luZGV4aWRdID0gew0KICAgICAgICAgICAgICAgICAgICBpZDogaW5kZXhpZCwNCiAgICAgICAgICAgICAgICAgICAgZnJvbWlkOiBpZCwNCiAgICAgICAgICAgICAgICAgICAgdG9pZDogdG9pZCwNCiAgICAgICAgICAgICAgICAgICAgaXNDOiBmYWxzZQ0KICAgICAgICAgICAgICAgIH07DQogICAgICAgICAgICB9DQogICAgICAgICAgICBvYmpbIm0iICsgaWRdLnJlbGFmcm9tW2luZGV4aWRdID0ge307DQogICAgICAgICAgICBvYmpbIm0iICsgaWRdLnJlbGFmcm9tLmRpc3BsYXkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuc3R5bGUuZGlzcGxheSAhPT0gJ25vbmUnID8gJ2Jsb2NrJyA6ICdub25lJzsNCiAgICAgICAgfQ0KICAgIH0NCiAgICBpZiAocmVsYXRvLmxlbmd0aCAhPT0gMCkgew0KICAgICAgICBvYmpbIm0iICsgaWRdLnJlbGF0byA9IHt9Ow0KICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlbGF0by5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgdmFyIGluZGV4aWQgPSByZWxhdG9baV0uaWQ7DQogICAgICAgICAgICB2YXIgZnJvbWlkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaW5kZXhpZCkuZ2V0QXR0cmlidXRlKCdlZDpmcm9taWQnKTsNCiAgICAgICAgICAgIGlmIChleHRyYVJlbGFbaW5kZXhpZF0gPT09IHVuZGVmaW5lZCkgew0KICAgICAgICAgICAgICAgIGV4dHJhUmVsYVtpbmRleGlkXSA9IHsNCiAgICAgICAgICAgICAgICAgICAgaWQ6IGluZGV4aWQsDQogICAgICAgICAgICAgICAgICAgIGZyb21pZDogZnJvbWlkLA0KICAgICAgICAgICAgICAgICAgICB0b2lkOiBpZCwNCiAgICAgICAgICAgICAgICAgICAgaXNDOiBmYWxzZQ0KICAgICAgICAgICAgICAgIH07DQogICAgICAgICAgICB9DQogICAgICAgICAgICBvYmpbIm0iICsgaWRdLnJlbGF0b1tpbmRleGlkXSA9IHt9Ow0KICAgICAgICAgICAgb2JqWyJtIiArIGlkXS5yZWxhdG8uZGlzcGxheSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5zdHlsZS5kaXNwbGF5ICE9PSAnbm9uZScgPyAnYmxvY2snIDogJ25vbmUnOw0KICAgICAgICB9DQogICAgfQ0KICAgIGlmIChjaGlsZHMubGVuZ3RoICE9PSAwKSB7DQogICAgICAgIG9ialsibSIgKyBpZF0uY2hpbGQgPSB7fTsNCiAgICAgICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImdbZWRcXDp0b2d0b3BpY2lkPSciICsgaWQgKyAiJ10iKSkgew0KICAgICAgICAgICAgLy8gY29uc29sZS5sb2coZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiZ1tlZFxcOnRvZ3RvcGljaWQ9JyIgKyBpZCArICInXSIpLmNoaWxkTm9kZXNbMF0uZ2V0QXR0cmlidXRlKCd4bGluazpocmVmJykpOw0KICAgICAgICAgICAgdmFyIHRvZyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImdbZWRcXDp0b2d0b3BpY2lkPSciICsgaWQgKyAiJ10iKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgndXNlJylbMF0uZ2V0QXR0cmlidXRlKCd4bGluazpocmVmJykuc2xpY2UoMSk7DQogICAgICAgICAgICBvYmpbIm0iICsgaWRdLnRvZ3R5cGUgPSB0b2c7DQogICAgICAgIH0NCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHMubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICAgIHZhciBjaWQgPSBjaGlsZHNbaV0uaWQ7DQogICAgICAgICAgICBpbml0KGNpZCwgb2JqWyJtIiArIGlkXS5jaGlsZCk7DQogICAgICAgIH0NCiAgICB9DQogICAgaWYgKGNhbGxzLmxlbmd0aCAhPT0gMCkgew0KICAgICAgICBvYmpbIm0iICsgaWRdLmNhbGwgPSB7fTsNCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjYWxscy5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgdmFyIGNpZCA9IGNhbGxzW2ldLmlkOw0KICAgICAgICAgICAgaW5pdChjaWQsIG9ialsibSIgKyBpZF0uY2FsbCk7DQogICAgICAgIH0NCiAgICB9DQogICAgaWYgKGJvdW5kYXJ5Lmxlbmd0aCAhPT0gMCkgew0KICAgICAgICBvYmpbIm0iICsgaWRdLmJvdW5kYXJ5ID0ge307DQogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYm91bmRhcnkubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICAgIHZhciBjaWQgPSBib3VuZGFyeVtpXS5pZDsNCiAgICAgICAgICAgIGluaXQoY2lkLCBvYmpbIm0iICsgaWRdLmJvdW5kYXJ5KTsNCiAgICAgICAgfQ0KICAgIH0NCiAgICBpZiAoc3VtbWFyeS5sZW5ndGggIT09IDApIHsNCiAgICAgICAgb2JqWyJtIiArIGlkXS5zdW1tYXJ5ID0ge307DQogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3VtbWFyeS5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgdmFyIGNpZCA9IHN1bW1hcnlbaV0uaWQ7DQogICAgICAgICAgICBpbml0KGNpZCwgb2JqWyJtIiArIGlkXS5zdW1tYXJ5KTsNCiAgICAgICAgfQ0KICAgIH0NCn0NCi8vLS1pbml0aWFsaXplDQovL3RvZ2dsZWRpc3BsYXktLQ0KdmFyIGNoYWluQXJyID0gW107DQpmdW5jdGlvbiBnZXRjaGFpbihpZCkgew0KICAgIGNoYWluQXJyLnVuc2hpZnQoJ20nICsgaWQpOw0KICAgIHZhciBwYXJlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuZ2V0QXR0cmlidXRlKCdlZDpwYXJlbnRpZCcpOw0KICAgIGlmICghcGFyZW50KSB7DQogICAgICAgIHJldHVybjsNCiAgICB9DQogICAgaWYgKHBhcmVudC5tYXRjaCgvXCwvKSkgew0KICAgICAgICBwYXJlbnQgPSBwYXJlbnQubWF0Y2goL1xkKyg/PVwsKS8pWzBdDQogICAgfQ0KICAgIGdldGNoYWluKHBhcmVudCk7DQp9DQpmdW5jdGlvbiBnZXRvYmooaWQpIHsNCiAgICBjaGFpbkFyciA9IFtdOw0KICAgIGdldGNoYWluKGlkKTsNCiAgICB2YXIgbWFpbiA9IGNoYWluQXJyWzBdOw0KICAgIGlmIChjaGFpbkFyci5sZW5ndGggPiAxKSB7DQogICAgICAgIHZhciBvYmogPSBkYXRhVHJlZVttYWluXTsNCiAgICAgICAgLy8gY29uc29sZS5sb2coY2hhaW5BcnIpOw0KICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGNoYWluQXJyLmxlbmd0aDsgaSsrKSB7DQogICAgICAgICAgICB2YXIgYSA9IGNoYWluQXJyW2ldOw0KICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBPYmplY3Qua2V5cyhvYmopLmxlbmd0aDsgaisrKSB7DQogICAgICAgICAgICAgICAgdmFyIGNvYmogPSBvYmpbT2JqZWN0LmtleXMob2JqKVtqXV1bYV07DQogICAgICAgICAgICAgICAgaWYgKGNvYmopIHsNCiAgICAgICAgICAgICAgICAgICAgb2JqID0gY29iajsNCiAgICAgICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIG9iag0KICAgIH0gZWxzZSB7DQogICAgICAgIHZhciBvYmogPSBkYXRhVHJlZVttYWluXTsNCiAgICAgICAgcmV0dXJuIG9iag0KICAgIH0NCg0KfQ0KZm9yICh2YXIgaSA9IDA7IGkgPCBzaGFwZS5sZW5ndGg7IGkrKykgew0KICAgIHNoYXBlW2ldLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgIHZhciBpZCA9IE51bWJlcih0aGlzLmdldEF0dHJpYnV0ZSgnZWQ6dG9ndG9waWNpZCcpKTsNCiAgICAgICAgdmFyIG9iaiA9IGdldG9iaihpZCk7DQoNCiAgICAgICAgdmFyIHR5cGUgPSBvYmoudG9ndHlwZSA9PT0gJ21pbnVzJyA/ICdwbHVzJyA6ICdtaW51cyc7DQogICAgICAgIHZhciBkaXNwbGF5ID0gb2JqLnRvZ3R5cGUgPT09ICdtaW51cycgPyAnbm9uZScgOiAnYmxvY2snOw0KICAgICAgICB0aGlzLmdldEVsZW1lbnRzQnlUYWdOYW1lKCd1c2UnKVswXS5zZXRBdHRyaWJ1dGUoJ3hsaW5rOmhyZWYnLCAnIycgKyB0eXBlKTsNCiAgICAgICAgb2JqLnRvZ3R5cGUgPSB0eXBlOw0KICAgICAgICBjaGVja0lEID0gb2JqOw0KDQogICAgICAgIHV0ZChvYmosIGlkLCBkaXNwbGF5KTsNCiAgICAgICAgZXh0cmFSZWxhRmluKCk7DQogICAgfQ0KfQ0KZnVuY3Rpb24gdXRkKG9iaiwgaWQsIHNob3csIG9jKSB7DQoNCiAgICB2YXIgcHNob3cgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuc3R5bGUuZGlzcGxheSAhPT0gJ25vbmUnID8gJ2Jsb2NrJyA6ICdub25lJzsNCiAgICBpZiAob2JqLnJlbGFmcm9tKSB7DQogICAgICAgIGlmIChvYmoucmVsYWZyb20uZGlzcGxheSAhPT0gcHNob3cpIHsNCiAgICAgICAgICAgIHZhciByZWxhZnJvbXMgPSBPYmplY3Qua2V5cyhvYmoucmVsYWZyb20pOw0KICAgICAgICAgICAgcmVsYWZyb21zLnNwbGljZShyZWxhZnJvbXMuaW5kZXhPZignZGlzcGxheScpLCAxKTsNCiAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgcmVsYWZyb21zLmxlbmd0aDsgaysrKSB7DQogICAgICAgICAgICAgICAgdmFyIGQgPSByZWxhZnJvbXNba107DQogICAgICAgICAgICAgICAgZXh0cmFSZWxhW2RdLmlzQyA9IHRydWU7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBvYmoucmVsYWZyb20uZGlzcGxheSA9IHBzaG93Ow0KICAgICAgICB9DQogICAgfQ0KICAgIGlmIChvYmoucmVsYXRvKSB7DQogICAgICAgIGlmIChvYmoucmVsYXRvLmRpc3BsYXkgIT09IHBzaG93KSB7DQogICAgICAgICAgICB2YXIgcmVsYXRvcyA9IE9iamVjdC5rZXlzKG9iai5yZWxhdG8pOw0KICAgICAgICAgICAgcmVsYXRvcy5zcGxpY2UocmVsYXRvcy5pbmRleE9mKCdkaXNwbGF5JyksIDEpOw0KICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCByZWxhdG9zLmxlbmd0aDsgaysrKSB7DQogICAgICAgICAgICAgICAgdmFyIGQgPSByZWxhdG9zW2tdOw0KICAgICAgICAgICAgICAgIGV4dHJhUmVsYVtkXS5pc0MgPSB0cnVlOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgb2JqLnJlbGF0by5kaXNwbGF5ID0gcHNob3c7DQogICAgICAgIH0NCiAgICB9DQogICAgaWYgKG9iai5jYWxsKSB7DQogICAgICAgIHZhciBjYWxscyA9IE9iamVjdC5rZXlzKG9iai5jYWxsKTsNCiAgICAgICAgaWYgKGNoZWNrSUQgIT09IG9iaikgew0KICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjYWxscy5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgICAgIHZhciBhID0gY2FsbHNbaV0uc2xpY2UoMSk7DQogICAgICAgICAgICAgICAgdmFyIGIgPSBvYmouY2FsbFtjYWxsc1tpXV07DQogICAgICAgICAgICAgICAgdmFyIGMgPSBiLnRvZ3R5cGU7DQogICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYSkuc3R5bGUuZGlzcGxheSA9IHNob3c7DQogICAgICAgICAgICAgICAgaWYgKGIucmVsYWZyb20gJiYgIWMpIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKGIucmVsYWZyb20uZGlzcGxheSAhPT0gc2hvdykgew0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlbGFmcm9tcyA9IE9iamVjdC5rZXlzKGIucmVsYWZyb20pOw0KICAgICAgICAgICAgICAgICAgICAgICAgcmVsYWZyb21zLnNwbGljZShyZWxhZnJvbXMuaW5kZXhPZignZGlzcGxheScpLCAxKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgcmVsYWZyb21zLmxlbmd0aDsgaysrKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGQgPSByZWxhZnJvbXNba107DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFSZWxhW2RdLmlzQyA9IHRydWU7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBiLnJlbGFmcm9tLmRpc3BsYXkgPSBzaG93Ow0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmIChiLnJlbGF0byAmJiAhYykgew0KICAgICAgICAgICAgICAgICAgICBpZiAoYi5yZWxhdG8uZGlzcGxheSAhPT0gc2hvdykgew0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlbGF0b3MgPSBPYmplY3Qua2V5cyhiLnJlbGF0byk7DQogICAgICAgICAgICAgICAgICAgICAgICByZWxhdG9zLnNwbGljZShyZWxhdG9zLmluZGV4T2YoJ2Rpc3BsYXknKSwgMSk7DQogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IHJlbGF0b3MubGVuZ3RoOyBrKyspIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZCA9IHJlbGF0b3Nba107DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFSZWxhW2RdLmlzQyA9IHRydWU7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBiLnJlbGF0by5kaXNwbGF5ID0gc2hvdzsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoYykgew0KICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJnW2VkXFw6dG9ndG9waWNpZD0nIiArIGEgKyAiJ10iKS5zdHlsZS5kaXNwbGF5ID0gc2hvdzsNCiAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT09ICdtaW51cycpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHV0ZChiLCBhLCBzaG93KQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGlmICgoYi5jYWxsIHx8IGIuYm91bmRhcnkgfHwgYi5zdW1tYXJ5KSAmJiBjID09PSAncGx1cycpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHV0ZChiLCBhLCBzaG93LCB0cnVlKQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmIChiLmNhbGwgJiYgIWMpIHsNCiAgICAgICAgICAgICAgICAgICAgdXRkKGIsIGEsIHNob3csIHRydWUpDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmIChiLnN1bW1hcnkgJiYgIWMpIHsNCiAgICAgICAgICAgICAgICAgICAgdXRkKGIsIGEsIHNob3cpDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmIChiLmJvdW5kYXJ5ICYmICFjKSB7DQogICAgICAgICAgICAgICAgICAgIHV0ZChiLCBhLCBzaG93KQ0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KICAgIGlmIChvYmouc3VtbWFyeSkgew0KICAgICAgICB2YXIgc3VtbWFyeXMgPSBPYmplY3Qua2V5cyhvYmouc3VtbWFyeSk7DQogICAgICAgIGlmICgoY2hlY2tJRCAhPT0gb2JqICYmIChvYmoudG9ndHlwZSA9PT0gJ21pbnVzJyB8fCAhb2JqLnRvZ3R5cGUpKSB8fCBjaGVja0lEID09PSBvYmopIHsNCiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3VtbWFyeXMubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICAgICAgICB2YXIgYSA9IHN1bW1hcnlzW2ldLnNsaWNlKDEpOw0KICAgICAgICAgICAgICAgIHZhciBvc3AgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChhKS5nZXRBdHRyaWJ1dGUoJ2VkOnBhcmVudGlkJyk7DQogICAgICAgICAgICAgICAgaWYgKG9zcC5tYXRjaCgvXCwvKSkgew0KICAgICAgICAgICAgICAgICAgICB2YXIgb3NwYSA9IG9zcC5zcGxpdCgnLCcpOw0KICAgICAgICAgICAgICAgICAgICB2YXIgb3NwTCA9IDA7DQoNCiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBvc3BhLmxlbmd0aDsgaisrKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdyA9PSAnbm9uZScpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQob3NwYVtqXSkuc3R5bGUuZGlzcGxheSAhPSAnbm9uZScpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3NwTCsrOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGEpLnN0eWxlLmRpc3BsYXkgIT0gJ25vbmUnKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zcEwrKzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBpZiAob3NwTCAhPT0gb3NwYS5sZW5ndGgpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIHZhciBiID0gb2JqLnN1bW1hcnlbc3VtbWFyeXNbaV1dOw0KICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGEpOw0KICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGEpLnN0eWxlLmRpc3BsYXkgPSBzaG93Ow0KICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgIGlmKGMpew0KICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJnW2VkXFw6dG9ndG9waWNpZD0nIithKyInXSIpLnN0eWxlLmRpc3BsYXk9c2hvdzsNCiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgaWYoYz09PSdtaW51cycpew0KICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgdXRkKGIsc2hvdykNCiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICBpZiAoYi5jYWxsJiZjPT09J3BsdXMnKSB7DQogICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICB1dGQoYixzaG93LHRydWUpDQogICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgaWYoYi5jYWxsJiYhYykgew0KICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICB1dGQoYixzaG93LHRydWUpDQogICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhiKS5sZW5ndGggIT09IDApIHsNCiAgICAgICAgICAgICAgICAgICAgdXRkKGIsIGEsIHNob3cpDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KICAgIGlmIChvYmouYm91bmRhcnkpIHsNCiAgICAgICAgdmFyIGJvdW5kYXJ5cyA9IE9iamVjdC5rZXlzKG9iai5ib3VuZGFyeSk7DQogICAgICAgIGlmIChjaGVja0lEICE9PSBvYmopIHsNCiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYm91bmRhcnlzLmxlbmd0aDsgaSsrKSB7DQogICAgICAgICAgICAgICAgdmFyIGEgPSBib3VuZGFyeXNbaV0uc2xpY2UoMSk7DQogICAgICAgICAgICAgICAgdmFyIGIgPSBvYmouYm91bmRhcnlbYm91bmRhcnlzW2ldXTsNCiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhhKTsNCiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChhKS5zdHlsZS5kaXNwbGF5ID0gc2hvdzsNCiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICBpZihjKXsNCiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiZ1tlZFxcOnRvZ3RvcGljaWQ9JyIrYSsiJ10iKS5zdHlsZS5kaXNwbGF5PXNob3c7DQogICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgIGlmKGM9PT0nbWludXMnKXsNCiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgIHV0ZChiLHNob3cpDQogICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgaWYgKGIuY2FsbCYmYz09PSdwbHVzJykgew0KICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgdXRkKGIsc2hvdyx0cnVlKQ0KICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgIGlmKGIuY2FsbCYmIWMpIHsNCiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgdXRkKGIsc2hvdyx0cnVlKQ0KICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMoYikubGVuZ3RoICE9PSAwKSB7DQogICAgICAgICAgICAgICAgICAgIHV0ZChiLCBhLCBzaG93KQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCiAgICBpZiAoIW9jICYmIG9iai5jaGlsZCkgew0KICAgICAgICB2YXIgY2hpbGRzID0gT2JqZWN0LmtleXMob2JqLmNoaWxkKTsNCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHMubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICAgIHZhciBhID0gY2hpbGRzW2ldLnNsaWNlKDEpOw0KICAgICAgICAgICAgdmFyIGIgPSBvYmouY2hpbGRbY2hpbGRzW2ldXTsNCiAgICAgICAgICAgIHZhciBjID0gYi50b2d0eXBlOw0KICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYSkuc3R5bGUuZGlzcGxheSA9IHNob3c7DQogICAgICAgICAgICB2YXIgdFNQYXRoID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigicGF0aFtlZFxcOnRvc3VwZXJpZD0nIiArIGEgKyAiJ10iKTsNCiAgICAgICAgICAgIGlmICh0U1BhdGgpIHsNCiAgICAgICAgICAgICAgICB0U1BhdGguc3R5bGUuZGlzcGxheSA9IHNob3c7DQogICAgICAgICAgICB9DQogICAgICAgICAgICB2YXIgbm90ZVRpcCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImdbZWRcXDpub3RldG89JyIgKyBhICsgIiddIik7DQogICAgICAgICAgICBpZiAobm90ZVRpcCkgew0KICAgICAgICAgICAgICAgIG5vdGVUaXAuc3R5bGUuZGlzcGxheSA9IHNob3c7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoYi5yZWxhZnJvbSAmJiAhYykgew0KICAgICAgICAgICAgICAgIGlmIChiLnJlbGFmcm9tLmRpc3BsYXkgIT09IHNob3cpIHsNCiAgICAgICAgICAgICAgICAgICAgdmFyIHJlbGFmcm9tcyA9IE9iamVjdC5rZXlzKGIucmVsYWZyb20pOw0KICAgICAgICAgICAgICAgICAgICByZWxhZnJvbXMuc3BsaWNlKHJlbGFmcm9tcy5pbmRleE9mKCdkaXNwbGF5JyksIDEpOw0KICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IHJlbGFmcm9tcy5sZW5ndGg7IGsrKykgew0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGQgPSByZWxhZnJvbXNba107DQogICAgICAgICAgICAgICAgICAgICAgICBleHRyYVJlbGFbZF0uaXNDID0gdHJ1ZTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBiLnJlbGFmcm9tLmRpc3BsYXkgPSBzaG93Ow0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmIChiLnJlbGF0byAmJiAhYykgew0KICAgICAgICAgICAgICAgIGlmIChiLnJlbGF0by5kaXNwbGF5ICE9PSBzaG93KSB7DQogICAgICAgICAgICAgICAgICAgIHZhciByZWxhdG9zID0gT2JqZWN0LmtleXMoYi5yZWxhdG8pOw0KICAgICAgICAgICAgICAgICAgICByZWxhdG9zLnNwbGljZShyZWxhdG9zLmluZGV4T2YoJ2Rpc3BsYXknKSwgMSk7DQogICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgcmVsYXRvcy5sZW5ndGg7IGsrKykgew0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGQgPSByZWxhdG9zW2tdOw0KICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFSZWxhW2RdLmlzQyA9IHRydWU7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgYi5yZWxhdG8uZGlzcGxheSA9IHNob3c7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKGMpIHsNCiAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJnW2VkXFw6dG9ndG9waWNpZD0nIiArIGEgKyAiJ10iKS5zdHlsZS5kaXNwbGF5ID0gc2hvdzsNCiAgICAgICAgICAgICAgICBpZiAoYyA9PT0gJ21pbnVzJykgew0KICAgICAgICAgICAgICAgICAgICB1dGQoYiwgYSwgc2hvdykNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKChiLmNhbGwgfHwgYi5ib3VuZGFyeSB8fCBiLnN1bW1hcnkpICYmIGMgPT09ICdwbHVzJykgew0KICAgICAgICAgICAgICAgICAgICB1dGQoYiwgYSwgc2hvdywgdHJ1ZSkNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoYi5jYWxsICYmICFjKSB7DQogICAgICAgICAgICAgICAgdXRkKGIsIGEsIHNob3csIHRydWUpDQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoYi5zdW1tYXJ5ICYmICFjKSB7DQogICAgICAgICAgICAgICAgdXRkKGIsIGEsIHNob3cpDQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoYi5ib3VuZGFyeSAmJiAhYykgew0KICAgICAgICAgICAgICAgIHV0ZChiLCBhLCBzaG93KQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KfQ0KDQpmdW5jdGlvbiBleHRyYVJlbGFGaW4oKSB7DQogICAgdmFyIGV4dHJha2V5cyA9IE9iamVjdC5rZXlzKGV4dHJhUmVsYSk7DQogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHRyYWtleXMubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgdmFyIGV4dHJhT2JqID0gZXh0cmFSZWxhW2V4dHJha2V5c1tpXV07DQogICAgICAgIGlmIChleHRyYU9iai5pc0MgPT09IHRydWUpIHsNCiAgICAgICAgICAgIHZhciBmc2hvdyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGV4dHJhT2JqLmZyb21pZCkuc3R5bGUuZGlzcGxheSAhPT0gJ25vbmUnID8gdHJ1ZSA6IGZhbHNlOw0KICAgICAgICAgICAgdmFyIHRzaG93ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZXh0cmFPYmoudG9pZCkuc3R5bGUuZGlzcGxheSAhPT0gJ25vbmUnID8gdHJ1ZSA6IGZhbHNlOw0KICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZXh0cmFPYmouaWQpLnN0eWxlLmRpc3BsYXkgPSBmc2hvdyAmJiB0c2hvdyA/ICdibG9jaycgOiAnbm9uZSc7DQogICAgICAgICAgICBleHRyYVJlbGFbZXh0cmFrZXlzW2ldXS5pc0MgPSBmYWxzZTsNCiAgICAgICAgfQ0KICAgIH0NCn0='))</script>
  </body>
</html>
